我们在public中自定义构造函数。把构造函数放在第四位。public中共有5个函数。
那么执行时,首先调用的是构造函数。这就打乱了执行秩序,一般来说,就是1~5的顺序执行,但是现在先执行的是第四个函数,执行完之后呢?该按照怎样的顺序执行?
声明对象并自动初始化时,他先根据传参调用自定义构造函数初始化,然后执行其他成员函数,那么这个顺序是怎样的呢?因为自定义的构造函数在public的第四位,它首先被调用是吧?那接下来呢?执行顺序是怎样的?
追答跟第一点说的一样,数据成员有顺序,而函数成员没有调用顺序的说法。
比如
class C
{
public:
void foo1(void) {};
void foo2(int) {};
~C() {};
C(void) {};
C(int) {};
};
int main(void)
{
//故意多加个大括号,这样便于分析
{
C o1(0); //调用 o1.C(int);
C o2; //调用 o2.C(void);
o2.foo1();
o2.foo2(1);
o1.foo2(2);
}// 出大括号前先调用o2.~C(),再调用o1.~C()。反正就是把定义时候的顺序刚好反过来。
return 0;
}
这个例子里按这个顺序:o1.C(int) => o2.C(void) => o2.foo1(void) => o2.foo2(int) =>o1.foo2(int) => o2.~C() =>o1.~C();
所以说函数成员(而不是数据成员)的调用顺序不取决于在类中或结构体中排列的顺序,而取决于被使用时候的调用顺序。
声明的时候,他就把成员都执行一次了。(自定义)构造函数也是成员函数的一员啊,当传参初始化时,是把所有成员函数都运行了一次。首先调用的是构造函数,那么接下来呢?我写代码的时候,把自定义构造函数放在public的第四位。共5个成员函数
追答初始化的时候只会去调用配合你参数的构造函数,其他函数的调用需要你自己写调用,系统不会默认帮你执行其他函数的初始化,
声明对象时,同时初始化,他不仅仅只是执行构造函数吧?他是把public里所有都执行了一遍。我把构造函数放在第4个。但是构造函数却是第一个被执行的,那么public成员执行的顺序是怎样的呢
追答你从哪里听说都执行一遍的啊 成员函数你调用它才执行