class word{ public: word(){cout<<"word constructure \n";} word(int i){cout<<"word 1 constructure \n";} }; class Text{ public: word w; Text():w(1) {cout<<"text constructure \n";} }; int main() { Text t; }
1.自己定义的类,他自己可以隐式初始化,调用她自己的默认够着函数,但是根据实验,好像只能调用默认够着函数
2.初始化列表和成员函数的构造一共值初始化一次,如果有列表,他自己就不构造了
3.初始化列表中的元素和成员的初始化,在构造函数之前运行
问题:const static 继承 virtual 特殊成员函数 这一堆关键词混合使用的时候会发生什么情况,这个需要弄明白
静态成员的使用
#include<iostream> #include<vector> using namespace std; class Text{ public: static const int a = 1; ///static 数据成员独立与该类存在 ///static int b = 1; ///静态成员也不能这么初始化变量 static int b; static vector<int> d ;///估计这次他就没有办法自己初始化了 static void f1(){cout<<"f1"<<endl;} ////成员函数没有this形参,他可以直接访问所属的类的static成员,不能使用非静态的 static void f2(){b=2;cout<<b<<endl;} static void f4(){b++;cout<<b<<endl;} Text(){ f4();} ///void f3(){b=3;cout<<b<<endl;}非静态函数,无法调用 //Text():a(2),b(2){} ///C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化 }; ///文章中解释说派生类也可以共享静态成员b,一会要试试 ///静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。举例如下 ///静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针 ///静态成员函数不可以同时声明为 virtual、const、volatile函数。举例如下: class Paper:public Text{ }; int Text::b = 0; //int Text::f1(){cout<<"f1"<<endl;} int main() { Text::f1();///可以直接调用 Paper::f1();///继承后也可以使用 Paper::f2();///静态成员函数可以调用静态变量 ///Paper::f3();非静态函数,无法调用 Text* t = new Text[5];///可以实现计数的功能 }