C中复合类的初始化顺序有派生类,有基类,有基类成员,有基类静态类成员
推荐回答
构造代码块的作用同样是给对象进行初始化。对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,类不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。扩展资料1)使用new操作符创建对象。如果含有静态成员变量:静态成员变量的静态代码块->静态成员变量的代码块->静态成员变量的构造方法)->静态代码块->代码块->构造函数2)如果不含静态成员变量:静态代码块->->代码块->构造函数。静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数。构造函数。
齐新春2019-12-22 00:21:19
提示您:回答为网友贡献,仅供参考。
其他回答
-
直接访问静态变量肯定不行,但可以变通一下,通过虚函数获得这个静态变量给你个例子,这样是不是满足你的要求?但这样的话,每个继承类都要做2件事1.定义静态变量2.重写虚函数,返回自己的静态变量这2件事可以通过宏来做。MFC好象就是这么干的#includeclassA{public:conststaticintValue=1;virtualintgetValueconst{returnValue;}};classB:publicA{public:conststaticintValue=2;virtualintgetValueconst{returnB::Value;}};intmain{A*p=newA;A*q=newB;printf"p->value=%d",p->getValue;printf"q->value=%d",q->getValue;getchar;。
赵颖芳2019-12-22 00:37:55
-
NO!基类指针告诉编译器它的静态类型是基类这种类型,所以限定了这个指针只能调用基类的自有成员。这个其实无关于他指向什么类型对象。但是,你作为这个指针的写作者,你当然知道这个基类指针指向的是派生类对象。所以,可以将这个基类指针强制转换为派生类指针就是强制编译器把这个指针静态类型看作派生类型,静态类型表明了一个对象能执行的所有动作成员函数+它的自有属性数据成员,这样派生类的新增成员就可以被这个指针调用了动态绑定的重写基类的virtual方法并不是派生类新增成员,而是重写override。
赵飞超2019-12-22 00:09:57
-
先基类成员,再本类成员。本类成员是按照声明的顺序来的。
黄生鹏2019-12-22 00:00:19
-
如果是初始化当然是调用基类的构造函数了,所以在创建派生类对象,引用或者指针的时候,就能调用到基类的构造函数来初始化基类成员。
龚巧丽2019-12-21 23:41:14