社区讨论

发现了C++虚继承构造函数顺序中一个非常奇怪的问题,求大佬解答

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo8w33uo
此快照首次捕获于
2023/10/28 01:30
2 年前
此快照最后确认于
2023/10/28 01:30
2 年前
查看原帖
CPP
#include<iostream>
using namespace std;
class Writing {
public:
	 Writing() {
		 cout<<"Writing constructor"<<endl;
	 }
	 ~Writing(){
		 cout<<"~Writing"<<endl;
	 }
};

class Racing {
public:
	 Racing(){
		 cout<<"Racing constructor"<<endl;
	}
	~Racing(){
		cout<<"~Racing"<<endl;
	}
};
class Weekend:virtual public Writing,virtual public Racing{
public:
    Weekend(){
        cout<<"Weekend constructor"<<endl;
    }
    ~Weekend(){
        cout<<"~Weekend"<<endl;
    }
};
class Workday:virtual public Racing,virtual public Writing{
public:
    Workday(){
        cout<<"Workday constructor"<<endl;
    }
    ~Workday(){
        cout<<"~Workday"<<endl;
    }
};
class Choseday:public Workday,virtual public Weekend{
public:
    Choseday(){
        cout<<"Choseday constructor"<<endl;
    }
    ~Choseday(){
        cout<<"~Choseday"<<endl;
    }
};
int main(){
  Choseday day;
  return 0;
}

程序输出是: Racing constructor Writing constructor Weekend constructor Workday constructor Choseday constructor ~Choseday ~Workday ~Weekend ~Writing ~Racing 但我的理解是先是Racing constructor再是Writing constructor 老师上课讲构造函数顺序是说: 1.先虚后实;2.先基类后派生类 为什么这条规则不适用于这个程序(感觉非常“诡异”)???

回复

0 条回复,欢迎继续交流。

正在加载回复...