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写在函数的后面
特点:不能够修改里面的数据成员
如果想要修改,就必须要用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;
}
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;
}
1.static成员不属于某一单独的对象,是属于类的,通俗的讲,是所有的对象可以共享的
2.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
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;
}
静态函数不能重载
上一篇:centos7部署KVM虚拟化
下一篇:数据挖掘(2.2)--数据预处理