我不明白為什么在下面的代碼中,當(dāng)我實(shí)例化一個(gè)類型為object的對(duì)象時(shí)daughter,grandmother()會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)?我認(rèn)為grandmother(int)應(yīng)該調(diào)用構(gòu)造函數(shù)(以遵循我的mother類構(gòu)造函數(shù)的規(guī)范),或者由于虛擬繼承而根本不應(yīng)該編譯此代碼。在這里,編譯器grandmother在我的背后默默地調(diào)用默認(rèn)構(gòu)造函數(shù),而我從未要求過(guò)它。#include <iostream>class grandmother {public: grandmother() { std::cout << "grandmother (default)" << std::endl; } grandmother(int attr) { std::cout << "grandmother: " << attr << std::endl; }};class mother: virtual public grandmother {public: mother(int attr) : grandmother(attr) { std::cout << "mother: " << attr << std::endl; }};class daughter: virtual public mother {public: daughter(int attr) : mother(attr) { std::cout << "daughter: " << attr << std::endl; }};int main() { daughter x(0);}
為什么在虛擬繼承中調(diào)用Default構(gòu)造函數(shù)?
慕碼人8056858
2019-11-12 09:52:05