關於從基類繼承來的方法和屬性的保護:
----class pig : public animal
c++不僅允許你對在類裡定義的方法和屬性實施訪問控制,還允許你控制子類可以訪問基類裡的哪些方法和屬性。
public: 是在告訴編譯器:繼承的方法和屬性的訪問級別不發生任何改變,即public仍可以被所有**訪問,protected只能由基類的子類訪問,private則只能由基類本身訪問。
protected: 使得這個子類外部的**無法通過子類去訪問基類的public
private: 是在告訴編譯器從基類繼承來的每乙個成員都當成private來對待,這意味著只有這個子類可以使用它從基類繼承來的元素。
例如當我們需要在基類裡提供乙個通用的函式,但在它的某個子類裡需要修改這個方法的實現,在c++裡,覆蓋(overriding)就可以做到。
c++可以讓我們很容易實現這種既有共同特徵又需要在不同的類裡有不同的實現的方法。
修改例題:為我們的animal新增eat()方法,並在pig和turtle中覆蓋。
#include #include using namespace std;
class animal;
class pig:public animal;
class turtle:public animal;
animal::animal(string thename)
void animal::eat()
void animal::sleep();
class pig:public animal;
class turtle:public animal;
animal::animal(string thename)
void animal::eat()
void animal::eat(int eatcount)
void animal::sleep();
class pig:public animal;
class turtle:public animal;
animal::animal(string thename)
void animal::eat()
void animal::sleep()
{ cout << "i am sleeping! dont disturb me" 《編譯結果:
shao@ubuntu:~/caoft_work/c_pp$ g++ test.cpp
test.cpp: in function 『int main()』:
test.cpp:84:10: error: no matching function for call to 『pig::eat()』
84 | pig.eat(); //報錯! 不能過載,因為被新建的帶有引數的eat函式給覆蓋了
| ^
test.cpp:64:6: note: candidate: 『void pig::eat(int)』
64 | void pig::eat(int eatcount) //對過載的方法進行定義
| ^~~
test.cpp:64:6: note: candidate expects 1 argument, 0 provided
小甲魚C 快速入門 P20 覆蓋方法和過載方法
就是說,父類中定義了乙個方法,但是子類繼承之後對這個方法產生了特殊的需求,需要對這個方法進行一些修改,那麼就可以在子類中定義乙個同名的方法覆蓋掉之前父類中的方法。注意,覆蓋方法時函式的形參和返回值都不能變化,不管是數量還是型別都不能變。與函式的過載是一樣的概念。乙個類中可以有幾個同名的方法,但這些方...
C 覆蓋方法和過載方法
覆蓋方法 overriding 在 c 裡,當我們需要在基類裡提供乙個通用的函式,但是在它的某個子類裡,需要修改這個方法的實現,就要用到覆蓋。覆蓋是存在類中,子類覆蓋是從基類繼承過來的方法 函式 但是函式名 返回值 引數列表都必須和基類的方法相同。c 可以讓我們很容易實現這種既有共同特徵又需要在不同...
細說C 覆蓋方法和過載方法
很多初學者朋友可能都傻傻分不清覆蓋方法和過載方法的區別是什麼,那麼小雨今天就以例項來給朋友們講解一下。首先說覆蓋方法,讓我們看下面的例子 class animal class pig animal class bird animal void animal move void pig move vo...