C++快速入門繼承機制中的構造器和析構器、訪問限制、覆蓋和過載、友元
繼承機制中的構造器和析構器
構造器是類初始化建立時呼叫的方法
--構造器的名字就是類的名字
析構器是類執行完後記憶體回收執行的方法
--析構器的名字~類名字
舉例看下在程式碼中執行的順序吧
/* 繼承機制中的構造器和析構器 */ #include <iostream> #include <string> class People { public: People(); ~People(); }; class Xiaoming :public People { public: Xiaoming(); ~Xiaoming(); }; int main() { Xiaoming xiaoming; std::cout << "我是建立類成功後列印的" << std::endl; return 0; } People::People() { std::cout << "People() " << std::endl; } People::~People() { std::cout << "~People()" << std::endl; } Xiaoming::Xiaoming() { std::cout << "Xiaoming() " << std::endl; } Xiaoming::~Xiaoming() { std::cout << "~Xiaoming()" << std::endl; }
執行的結果如下:
先執行基類People的構造器,再執行子類的構造器,接著執行Main()裡面的其他方法,最後先執行子類的析構器,最後才執行基類的析構器
訪問限制
在基類被派生出新的類的的時候,會出現一基類屬性和基方法是不想讓派生類訪問到的,所以就出現了訪問限制
訪問限制C++裡面是三種
public 公共的 都可以訪問修改
protected 保護的 在基類和派生類裡面能訪問
private 私有的 只在自己類裡面才能訪問
覆蓋和過載
派生類會繼承基類的公開的屬性和方法
覆蓋
--派生類覺得基類的方法不足以實現自己想要的功能時,可以寫一個和基類一樣名字的方法,覆蓋基類的方法(一模一樣,方法名,引數都相同)
過載
--派生類實現一個跟基類一樣名字的方法,但是,但是引數型別或者引數個數不同,從而實現函式的過載,這裡需要注意的時,函式的返回值不同是不能當做過載的
友元
友元--一種特殊的類關係
在不是基類和派生類的兩個類中,一個類需要用到另外一個類中的某一個屬性或者方法時,可以使用友元來實現
友元的實現:friend class 類名
這個定義的語句可以放在類中的公共、保護、私有的任何下面都是可以的
例如:
/* 友元 */ #include <iostream> #include <string> class People { public: People(); ~People(); void eat(); friend class Animal; }; class Animal { public: Animal(); ~Animal(); void run(); }; int main() { People xiaoming; xiaoming.run(); return 0; } void Animal::run() { std::cout << "run()" << std::endl; } People::People() { std::cout << "People() " << std::endl; } People::~People() { std::cout << "~People()" << std::endl; } Animal::Animal() { std::cout << "Xiaoming() " << std::endl; } Animal::~Animal() { std::cout << "~Xiaoming()" << std::endl; }
使用友元類時注意: (1) 友元關係不能被繼承。 (2) 友元關係是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的宣告。 (3) 友元關係不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明
注意事項:
--友元可以訪問類的私有成員。
--只能出現在類定義內部,友元宣告可以在類中的任何地方,一般放在類定義的開始或結尾。
--友元可以是普通的非成員函式,或前面定義的其他類的成員函式,或整個類。
--類必須將過載函式集中每一個希望設為友元的函式都宣告為友元。
--友元關係不能繼承,基類的友元對派生類的成員沒有特殊的訪問許可權。如果基類被授予友元關係,則只有基類具有特殊的訪問許可權。該基類的派生類不能訪問授予友元關係的類。