##
不能调用构造函数初始化,因为构造函数归类所有,不是对象所有
你调用对象的构造函数无法对类的静态成员变量进行初始化
//对象名.静态成员变量 //类名::静态成员变量
静态成员变量的初始化和全局变量的初始化
#include<iostream> ? using namespace std; class B { public: B() { cout << "B的构造函数" << endl; } }; class A { int a; public: static B m;//静态的类成员 static int n; static void Show() { cout << "hello" << endl; } }; int A::n = 0;//类外初始化 B A::m=B(); /* * 1.静态成员变量属于类,不属于对象,多个对象共享一个静态成员变量 * 2.静态成员变量在类内定义,类外初始化 * 3.可以通过对象名或类名直接访问公有的静态成员变量 * 4.静态成员变量在编译阶段分配内存,也就是主函数之间 * 5.主函数之前会执行什么? * 静态成员变量的初始化和全局变量的初始化 */ int main() { cout << "__________________________" << endl; A a1,a2,a3; a1.n++; a2.n++; a3.n++; A::n++; cout << A::n << endl; cout << a1.n << endl; cout << a2.n << endl; cout << a3.n << endl; return 0; }
因为没有this指针的话,编译器就无法确定究竟是对哪个对象的非静态成员变量进行操作
#include <iostream> using namespace std; class A { int b; static int a; public: static void func1() { ? } static void func() { this->b = 1; func1(); a = 2; } }; int A::a = 0; ? int main() { ? return 0; }
#include <iostream> ? using namespace std; ? class A { int a = 2; public: void func1() { a = 1; cout << "1" << endl; } static void func2() { cout << "2" << endl; } }; int main() { A* a = nullptr; return 0; a->func1(); a->func2(); A::func2(); }
if(this==NULL) return ;