簡體   English   中英

為什么派生類可以調用基類中的成員函數?

[英]why does the derived class could call the member function in the base class?

我的問題是,我有三個班,A是抽象班。 B衍生自A,然后C衍生自B.

我只列出了我有疑問的功能。

class A{
public:virtual void storedata(int a, int b, int c, int d)=0;
}

B.h
class B: public A{
public:virtual void storedata(int a, int b, int c, int d);
}
B.cpp
void storedata(int a, int b, int c, int d)
{ do something }

C.h
class C: public B{
public:virtual void storedata(int a, int b, int c, int d); 
}

C.cpp
void storedata(int a, int b, int c, int d)
{
    B::storedata(int a, int b, int c, int d);
}

為什么派生類C可以在C.cpp中調用B :: storedata?

為什么不能這樣做? 覆蓋虛函數的目的是允許您自定義派生類型的對象的行為,但有時所需的行為包括執行基礎執行的處理,可能有條件地執行或執行某些操作前或后操作。 實際上,您可以提供純虛函數的實現,這主要是有用的,這樣派生類可以在適合它們時方便地調用抽象基類的實現。 在這種情況下,覆蓋是無用的,因為它只完成B版本的功能,但一般來說,允許調用B版本可能很有用。

類C的函數storedata可能不會調用類B的函數storedata,因為類B中的函數storedata被聲明為具有訪問控制private

所以編譯器應該發出錯誤。

如果它將在具有publicprotected訪問控制的B類中聲明,則可以由C類調用它。 可以調用它,因為在類C的函數storedata中,調用指定了引用類B中函數storedata的限定名。

Functions declared in base class are also members of derived class. 如果派生類聲明一個與基類中的函數同名的函數,則派生類中的函數會隱藏基類中的函數。 您可以通過使用引用基類中的函數的限定名稱在派生類的某個方法中調用基類的函數。 並且功能是否為虛擬並不重要。

編輯:我看到你已閱讀我的帖子並將私人訪問控制更改為公共訪問控制。:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM