const
const修饰的数据成员
1.常数据必须要初始化
2.初始化必须采用,初始化参数列表
3.不能够被修改
4.构造函数要初始化数据成员
#include<iostream> #include<string> using 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<iostream> #include<string> using 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<iostream> #include<string> using 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<iostream> #include<string> using 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<iostream> #include<string> using 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个,都用一个,数组中每构建一个,函数调用一次,所以为33.第三个是普通的变量,调用一次就是1
static的成员函数
1.跟上面一样,static放在函数的前面
2.类外实现,也不需要static来修饰
3.静态函数中没有this->指针
4.静态成员函数访问问题
静态成员函数可以直接访问静态成员
静态成员函数访问非静态成员,要指定对象访问
方法一:静态成员函数传参
方法二:在静态函数定义对象去访问
#include<iostream> #include<string> using 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; }
静态函数不能重载