class Base{
public:
int pub_int;
void pub_fun();
protected:
int pro_int;
void pro_fun();
private:
int pri_int;
void pri_fun();
};

class Pri_Derive:private Base{
};
class Pub_Derive:public Base{
};
int main()
{
Pri_Derive d1;
Pub_Derive d2;
d2.pub_fun();//沒問題,pub_fun在派生類里是public的
d1.pub_fun();//編譯出錯,pub_fun在派生類里是private的
}

函數重載幾個函數名字相同但形參列表不同被稱為重載函數,main函數不能重載。
頂層const與非頂層const的形參無法區分開(常量指針和普通指針無法區分)。
形參不同就是一種重載,但是在實際使用時卻可能因為函數匹配過程中出現二義性編譯失敗,詳情見函數重載類相關知識點拷貝控制(構造與析構)
每個類都分別定義了它的對象被初始化的方式,類通過一個或幾個特殊的成員函數來控制其對象的初始化過程,這些函數叫做構造函數。構造函數的任務是初始化對象的數據成員,無論何時只要類的對象唄創建,就會執行構造函數。
構造函數的名字和類名相同。和其他函數不一樣的是,構造函數沒有返回類型;除此之外類似于其他的函數,構造函數也可能有一個(可能為空)的參數列表和一個(可能為空的)函數體。類可以包含多個構造函數,和其他重載函數差不多,不同的構造函數之間必須在參數數量或者參數類型上有所區別。
不同于其他成員函數,構造函數不能被聲明為const的。當我們創建類的一個const對象是,知道構造函數完成初始化過程,對象才能真正取得其”常量“屬性。因此,構造函數在const對象的構造過程中可以向其寫值。
未提供出事值得對象被執行默認初始化。類通過一個特殊的構造函數來控制默認初始化過程,這個函數叫默認構造函數默認構造函數無須任何實參。
只有當類沒有聲明任何構造函數時,編譯器才會自動地生成默認構造函數。同時若一個構造函數為所有參數都提供了默認實參,則它實際上也定義了默認構造函數,并且此時不能再次定義無實參的默認構造函數(函數重載處細說)。
復制構造函數的第一個參數是自身類類型的引用,且任何額外參數都有默認值。與默認構造函數不同,即使我們定義了其他的構造函數,編譯器也會為我們合成一個復制構造函數。
當一個對象因為離開作用域/容器被銷毀/想不開(?)等等原因被銷毀時,首先調用其析構函數,然后按照聲明成員順序的逆序銷毀成員。
友元
友元在類內部聲明,僅置頂了訪問的權限而并非通常意義上的函數聲明,因此如要使用必須在有元聲明外再專門對函數進行聲明(盡管許多編譯器并未強制要求友元函數必須在使用之前在類的外部聲明)。
友元函數的訪問權限是類本身的所有成員和繼承父類的/成員。
通過在成員的聲明前加上關鍵字使其成為靜態成員。
與其他成員函數一樣,既可以在類內部也可以在類外部定義靜態成員函數。
因為靜態數據成員不屬于類的任何一個對象,所以它們并不是在創建累的對象時被綁定的。這意味著它們不是有類的構造函數初始化的。而且一般來說,我們不能在類的內部初始化靜態成員。相反的,必須在類的外部定義和初始化每個靜態成員。和其他對象一樣,一個靜態數據成員只能定義一次。
雖然通常情況下,類的靜態成員不應該在類的內部初始化。然而,我們可以為靜態成員提供const整數類型的類內出事值,不過要求靜態成員必須是字面值常量類型的常量表達式(簡單理解為常量就行,考試應該不會考那么細)。
常對象
定義常對象必須提供初始值。并且類的常量對象、常量對象的引或指針都只能調用類的常函數。
只能通過構造函數初始化一個常數據成員。這里把初始化加粗是因為需要注意兩種形式
class A{
private:
const int a;
public:
A(int g=0){a=g}
};
class A{
protected:
const int a;
public:

A(int g=0):a(g){}
};
不等價,前者無法通過編譯。
通過在參數列表后面加const關鍵字聲明,其作用是將*this指針轉換成聲明成指向常量的指針,所以在這樣的常成員函數中不可以修改調用它的對象的內容。
虛基類
盡管在派生列表中同一基類只能出現一次,但實際上派生類可以多次繼承同一個類。派生類可以通過它的兩個直接基類分別繼承同一個間接基類,也可以直接繼承某個基類,然后通過另一個積累再一次間接繼承該類。
在默認情況下,派生類中含有繼承臉上每個類對應的子部分。如果某個類在派生過程中出現了多次,則派生類中將包括該類的多個子對象。這樣的情況對某些要符合某些要求的淚來說顯然是行不通的。
于是在C++中通過徐濟成的機智解決上述問題。徐濟成的目的是令某個類做出聲明定義靜態成員關鍵字,承諾愿意共享它的基類。其中,共享的基類子對象成為虛基類。在這種機制下,不論虛基類在集成體系中出現了多少次,在派生類中都只包含唯一一個共享的虛基類子對象。
我們置頂虛基類的方式是在派生列表中添加關鍵字,這個關鍵字與派生訪問說明符的順序隨意。
含有虛基類的對象的構造順序與一般的順序稍有區別:首先使用提供給最底層派生類構造函數的初始值初始化該對象的虛基類子部分,接下來按照出現在派生列表中出現的次序依次對其進行初始化。虛基類總是先于非虛基類構造,與它們在集成體系中的次序和位置無關。一個類可以有多個虛基類,此時定義靜態成員關鍵字,這些虛的子對象按照它們在派生列表中出現的順序從左向右依次構造。
如C++ 中的例子: