1. 程式人生 > >虛繼承基類構造順序

虛繼承基類構造順序

#include<iostream>
using namespace std;
class A{
public:
	A(char *s)
	{
		cout << s << endl;
	}
	~A(){}
};
class B :virtual public A
{
public:
	B(char *s1, char*s2) :A(s1){
		cout << s2 << endl;
	}
};
class C :virtual public A
{
public:
	C(char *s1, char*s2) :A(s1){
		cout << s2 << endl;
	}
};
class D :public B, public C
{
public:
	D(char *s1, char *s2, char *s3, char *s4) :B(s1, s2), C(s1, s3), A(s2 )//初始化成員列表的順序不是真的構造順序
	{                                                                      //其構造順序與基類被繼承的順序相關
		cout << s4 << endl;
	}
};
int main() {
	D *p = new D("class A", "class B", "class C", "class D");
	delete p;
	return 0;
}

//輸出:BBCD


相關推薦

繼承構造順序

#include<iostream> using namespace std; class A{ public: A(char *s) { cout << s &l

析構函數,派生調用構造方法

div pub urn new turn col blog 徹底 () #include <iostream> using namespace std; class A{ public: A() { cout<<"construct A

繼承構造方法的執行順序

code pri span 都是 例子 父類 一次 沒有 pan 1 class a: 2 def __init__(self): 3 print(‘a‘) 4 5 class b(a): 6 def __init__(sel

13)編寫一個子SnakeCtrl來繼承

col nbsp pub 提示 message rtu cga 分享圖片 開頭 1)首先是創建子類SnakeCtrl          2) 添加那個SnakeCtrl子類                   3)出來了SnakeCtrl的基本樣子

Swift建立一個繼承

//建立一個繼承Person的類 class Teache:Person{ func teach(){ print("上課要遲到了") //呼叫父類的run函式 super.run() } } var DyTeacher = T

關於Java中構造器的呼叫問題

在《Java程式設計思想》第7章複用類中有這樣一段話,值得深思。當子類繼承了父類時,就涉及到了基類和匯出類(子類)這兩個類。從外部來看,匯出類就像是一個與基類具有相同介面的新類,或許還會有一些額外的方法和域。但繼承並不只是複製基類的介面。當建立一個匯出類物件時,該物件包含了一個基類的子物件,這個子物件與你用

關於Java中構造器的調用問題

ESS java編程思想 後者 draw netty 提升自己 復制 struct rto 在《Java編程思想》第7章復用類中有這樣一段話,值得深思。當子類繼承了父類時,就涉及到了基類和導出類(子類)這兩個類。從外部來看,導出類就像是一個與基類具有相同接口的新類,或許還會

記mybatis-generator生成實體繼承的一個大坑

我的天哪,一個簡單的問題,搞死我了。 在我們用mybatis-generator生成實體類的時候,會希望這些實體類繼承自一個基類,這個基類包含了實體類共同的屬性,如uuid,createdate等資訊。 問題來了,直接在generatorConfig中新增roo

ThinkPHP5 0 控制器繼承和自定義

                Tp5的類名字是很坑的。如果是找不到類,建議從命名著手。。。 繼承系統控制器基類:

繼承派生,虛擬函式小結

基類TableTennisPlayer  派生類RatedPlayer 1.       基類指標可以在不進行顯示型別轉換的情況下指向派生類物件;基類引用可以在不進行顯示型別轉換的情況下引用派生類物件. RatedPlayer palyer(1000,”Mallory”,

java中子能不能繼承構造方法

    結果有些和想象中的不一樣吧。    原因如下:其實每個子類構造方法的第一條語句,都是隱含地呼叫super(),如果父類沒有這種形式的建構函式,那麼在編譯的時候就會報錯。    所以父類中的構造方法是不能繼承的,但是在例項化子類的時候會呼叫父類的構造方法,這樣就能解釋下面這種情況了。面試題目1:指出下面

多重繼承的建構函式和解構函式的執行順序(包含

C++程式碼: #include <iostream> using namespace std; class A { public: A() { co

3.10 C++ 繼承

set http turn () virt public virtual 這樣的 rtu 參考:http://www.weixueyuan.net/view/6367.html 總結:     本例即為典型的菱形繼承結構,類A中的成員變量及成員函數繼承到類D中均會產生兩份,

OOP2(函數/抽象/訪問控制與繼承)

控制 space protected 相對 mes nbsp 獨立 friend 抽象類 通常情況下,如果我們不適用某個函數,則無需為該函數提供定義。但我們必須為每個虛函數都提供定義而不管它是否被用到了,這因為連編譯器也無法確定到底會適用哪個虛函數 對虛函數的調用可能在

23.C++- 繼承的多種方式、顯示調用父構造函數、父子之間的同名函數、virtual函數

vat 子類 name png 才會 項目 作用域 static 創建子類 在C++中,繼承方式共有3種: public繼承 -指父類的成員(變量和函數)訪問級別,在子類中保持不變 private繼承 -指父類的成員,在子類中變為private私有成員. -也就是說子

c++筆記之&菱形繼承

簡單例子: #include <iostream> #include <string> using namespace std; class Person { public: Person(string nam, char s, int a) { n

13.多重繼承(菱形繼承),繼承

多重繼承: 就是一個派生類多個基類,幾乎與單繼承是一致的。 唯一考點: 菱形繼承結構(B類C類繼承A類,D類繼承A類。),產生問題,派生類有多份基類的資料。   解決辦法:B C都採用虛繼承,只有一

16 More Effective C++ —— 條款23/24 (虛擬函式、、多繼承、RTTI)

0 前序 由於條款23只是針對iostream和stdio.h之間,進行執行效率的對比,此處不會詳細展開。其宗旨是儘量使用C++的庫,可以提高程式的執行效率和安全性。 此篇將著重討論條論24的內容。 1 多型 C++中,多型是指使用基類指標、引用指向派生類,若基類和派生類中,

派生建構函式執行順序的概念

派生類建構函式執行順序如下:     所有基類的建構函式,多個基類建構函式的執行順序取決於定義派生類時所指定的順序,與派生類建構函式中所定義的成員初始化列表的引數順序無關; 建構函式的顯示初值初始化,與初始化列表順序無關,而與類中成員定義順序有關。 如: clas

C++:10---多級混合繼承詳解

一、多級混合繼承 下面介紹菱形繼承 //菱形繼承 class A { public: int data; }; class B:public A { public: int data; }; class C:public A { public: int data;