我在學習C/C++過程中產生的疑惑
目錄
C ++過載,覆蓋,隱藏這三者的定義和用途。
過載即同一作用英文域中(基類和派生類中函式構不成過載,因為作用域不同)函式名稱相同,引數列表不同的兩個函式可以構成過載,它們代表兩種不同的實現方法。
覆蓋即當派生類實現了一個函式,這個函式的函式名,返回型別,引數列表都與其基類的一個函式完全一樣,並且基類的函式返回型別前一定要有虛擬修飾,則構成覆蓋,即派生類覆蓋了基類的函式。
隱藏即派生類實現的函式名稱與基類函式名稱相同時,不管其它條件,覆蓋不滿足,就構成隱藏。
它們都能實現多型。
宣告和定義類以及它們的記憶體分配
class A; //宣告類 不分配空間 class A //定義類 分配空間,此時空間為:sizeof(A)=1; {}; class A //定義一個類 此時空間為:sizeof(A) = 8; { int a; char c; }; A a; //例項化一個物件 分配空間 int x; // 定義一個變數, 沒有初始化,也可看作宣告 int y = 10; // 定義一個變數, 同時進行初始化 extern int c; // 宣告一個外部extern的int型變數c
宣告:用於向程式表明變數的型別和名字。定義也是宣告:當定義變數的時候我們聲明瞭它的型別和名字。可以通過使用extern宣告變數名而不定義它。不定義變數的宣告包括物件名,物件型別和物件型別前的關鍵字的extern。在程式中,變數可以有多個宣告。
定義:用於為變數分配儲存空間,還可為變數指定初始值在程式中,變數有且僅有一個定義。
無須糾結這類問題,現在主要是學到思想,資料結構演算法,作業系統,設計模式,開發工具使用,實際開發。
虛拷貝建構函式
暫時不去了解。
繼承記憶體分佈以及會拷貝記憶體嗎,構造派生類會先構造基類嗎(抽象類怎麼不符合這一說)..
暫時沒必要糾結。
賦值相容
父類: class Father
{
};
子類: class Child:public Father
{
}
賦值相容規則是指在需要父類物件的地方可以使用子類物件來代替:
通過public繼承,子類得到了父類除構造/解構函式之外的所有成員,且所有成員的訪問屬性和父類的完全相同。這樣,public繼承的子類實際就具備了父類的所有功能,凡是父類能解決的問題,子類都可以解決。
賦值相容規則是發生在父類和子類之間的:
(1) 子類的物件可以賦值給父類物件物件,過程會發生隱式型別轉換
Child myson;
Father my = myson;
(2) 父類型別的指標可以指向子類物件Father *my = new Child;
(3) 父類型別的引用可以用子類物件初始化Child myson;
Father &my = myson;
發生賦值相容後,子類物件只能被作為父類物件使用,即只能使用從父類繼承而來的成員。