1. 程式人生 > >我在學習C/C++過程中產生的疑惑

我在學習C/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;

  發生賦值相容後,子類物件只能被作為父類物件使用,即只能使用從父類繼承而來的成員。