3
C++中虛擬繼承中構造函數調用的順序是什麼?虛擬繼承中構造函數調用的順序是什麼?
對於以下兩種情況的多重繼承; (I)爲下面的代碼,沒有虛擬繼承;
class a
{
public:
a()
{
cout<<"\t a";
}
};
class b: public a
{
public:
b()
{
cout<<"\t b";
}
};
class c: public b
{
public:
c()
{
cout<<"\t c";
}
};
class d: public c
{
public:
d()
{
cout<<"\t d";
}
};
class e: public c, public d
{
public:
e()
{
cout<<"\t e";
}
};
class f: public b, public e
{
public:
f()
{
cout<<"\t f";
}
};
int main()
{
f aaa;
return 0;
}
輸出是:
a b a b c a b c d e f
(ii)與E級的虛擬繼承:
class a
{
public:
a()
{
cout<<"\t a";
}
};
class b: public a
{
public:
b()
{
cout<<"\t b";
}
};
class c: public b
{
public:
c()
{
cout<<"\t c";
}
};
class d: public c
{
public:
d()
{
cout<<"\t d";
}
};
class e: public c, public d
{
public:
e()
{
cout<<"\t e";
}
};
class f: public b, public virtual e
{
public:
f()
{
cout<<"\t f";
}
};
int main()
{
f aaa;
return 0;
}
輸出是:
a b c a b c d e a b f
有人能解釋如何在兩種情況下都可以獲得輸出結果? 虛擬繼承如何影響對象的構造?