C++特殊成员
迪丽瓦拉
2024-05-31 05:49:19
0

C++特殊成员

  • const
    • const修饰的数据成员
    • const修饰的成员函数
    • const对象
  • static
    • static成员
      • 案例
    • static的成员函数

const

const修饰的数据成员

1.常数据必须要初始化
2.初始化必须采用,初始化参数列表
3.不能够被修改
4.构造函数要初始化数据成员

#include
#includeusing namespace std;class MM
{
public:MM(int age, string name): age(10), name("ni"){}void printDate(){cout << name << " " << age;}
private:const int age;const string name;
};
int main()
{MM mm(10, "ni");mm.printDate();system("pause");return 0;
}

构造函数中,不能用好this指针访问常数据成员
在这里插入图片描述

const修饰的成员函数

const修饰的成员函数:常成员函数
书写:const写在函数的后面
特点:不能够修改里面的数据成员
如果想要修改,就必须要用mutable,(但一般情况,既然使用了常成员函数,就没有必要去修改它)
常成员函数可以和普通函数同时存在
作用:保护数据,不被修改

注意:构造函数和析构函数上,不允许使用const
在这里插入图片描述

#include
#includeusing namespace std;class MM
{
public:void print() const{//age = 10; //错误 不能够修改cout << this->age << endl;name = "温柔了岁月"; //可用mutable修改}//MM() const //错误  构造函数和析构函数不允许使用const//{//}
private:int age;mutable string name;
};
int main()
{system("pause");return 0;
}

const对象

1.const修饰的对象
2.常对象只能调用常成员函数

常对象只能调用常成员函数,如果调用普通函数将会报错
在这里插入图片描述

#include
#includeusing namespace std;class MM
{
public:MM(string name):name(name){}void printDate() const{cout << name << endl;}
private:string name;};
int main()
{const MM mm("温柔了岁月"); //常对象mm.printDate (); //常对象调用常成员函数return 0;
}

static

1.static成员不属于某一单独的对象,是属于类的,通俗的讲,是所有的对象可以共享的
2.static成员,它的访问可以不需要对象

static成员

#include
#includeusing namespace std;class MM
{
public:static int age;string name;
};int MM::age = 2;  //类外初始化int main()
{cout << MM::age << endl;  //static访问,不需要对象system("pause");return 0;
}

案例

算出下列age 和 m_age的值

#include
#includeusing namespace std;class MM
{
public:MM(){this->age++;this->m_age++;}
public:static int age;int m_age = 0;string name;
};int MM::age = 0;  //类外初始化int main()
{cout << MM::age <<  endl;  //static访问,不需要对象MM mm[3];cout << MM::age << endl;cout << mm->m_age << endl;system("pause");return 0;
}

在这里插入图片描述

1.第一个数,初始值为0,肯定结果为0
2. 第二个,注意是静态成员,这里为3,
因为静态变量都有一个共同点,共用,这里数组3个,都用一个,数组中每构建一个,函数调用一次,所以为3

3.第三个是普通的变量,调用一次就是1

static的成员函数

1.跟上面一样,static放在函数的前面
2.类外实现,也不需要static来修饰
3.静态函数中没有this->指针
4.静态成员函数访问问题
静态成员函数可以直接访问静态成员
静态成员函数访问非静态成员,要指定对象访问
方法一:静态成员函数传参
方法二:在静态函数定义对象去访问

#include
#includeusing namespace std;
class MM
{
public:static string name;string m_name;static void test1();static void test2(MM &m_name);void test1(); //错误,不存在静态函数重载
};void MM::test1()
{cout << name << endl;//cout << m_name << endl;//错误 
}void MM::test2(MM & object)
{cout << object.m_name << endl; //通过传参
}
int main()
{system("pause");return 0;
}

静态函数不能重载
在这里插入图片描述

相关内容