发现了C++虚继承构造函数顺序中一个非常奇怪的问题,求大佬解答
查看原帖
发现了C++虚继承构造函数顺序中一个非常奇怪的问题,求大佬解答
706459
Go_for_itligli666666楼主2022/5/14 09:25
#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.先基类后派生类 为什么这条规则不适用于这个程序(感觉非常“诡异”)???

2022/5/14 09:25
加载中...