所以,我有一個叫做A
的類,帶有原型函數x。 B
,C
和D
是從A
派生的,所以派生類具有函數x也是原型的。 現在我希望不是每個類都有定義的函數x。 在C++中可能如何?聲明在父類中,並在子中定義
0
A
回答
0
1
這是對OOP原則。繼承意味着一種關係。在你的例子中,B
,C
和D
是一種A
。如果A
有方法x
,其他人也應該有。
如果事實並非如此,x
是不是真正的A
(但它的後裔之一)
的方法如果x
應該從A
唯一可替代,使其private
:
private: void x() {}
0
假設你正在問什麼,因爲從A派生的每個類都將定義x。如果你要求的是B類,C類和D類是以A的形式實現的(即它們將利用A的功能但不能被認爲是A的一個實例),那麼你可以在B中指定A的受保護或私有繼承,C和D.
示例代碼使用這種方法可能是:
#include <iostream>
class A
{
public:
void x()
{
std::cout << "Hello from A::x" << std::endl;
}
};
class B : protected A
{
public:
};
class C : protected A
{
public:
void x()
{
std::cout << "Hello from C::x" << std::endl;
}
};
class D : public A
{
public:
};
int main(int argc, char **argv)
{
//B instance_of_B;
//instance_of_B.x(); // Will cause a compiler error
C instance_of_C;
instance_of_C.x(); // Will print Hello from C::x
D instance_of_D;
instance_of_D.x(); // will print Hello from A::x
}
相關問題
- 1. Android在父類xml中聲明textview並在子類中設置偵聽器
- 2. 在類定義中聲明的C++宏?
- 3. 聲明在類中定義的結構
- 4. 在類定義中的Python nonlocal聲明
- 5. 在Java中的類聲明和定義
- 6. 如何在類中聲明一個類並稍後定義它?
- 7. 我們可以在父類中聲明構造函數,並在java中的另一個類中定義它?
- 8. 如何在JavaScript中聲明父類和子類?
- 9. 如何在父類中聲明子類型?
- 10. 在子類中聲明類級變量
- 11. 在超類中聲明子類變量
- 12. 在Java中,爲什麼在父類和子類中聲明的變量在子類的實例中不可見?
- 13. 如何獲取在特定父類中聲明的方法?
- 14. 聲明並在其他類(未Form1中)
- 15. 父類的方法在javascript中的子類中未定義
- 16. 在C++中聲明C ==定義?
- 17. 方法聲明和在java中定義
- 18. Kubernetes nfs在聲明中定義路徑
- 19. 在自定義NSMutableArray中聲明屬性
- 20. 在Scilab中定義/聲明變量`
- 21. 類聲明和定義
- 22. F# - 在聲明中指定類型
- 23. 在父進程中的子進程中聲明的訪問#TempTable
- 24. 在派生類中定義函數而無需在基類中聲明
- 25. 在* .h中聲明的未定義引用已在另一個* .h中聲明
- 26. 聲明子類
- 27. 在其父類中定義子類是否非常規?
- 28. Haskell:|在類別聲明中
- 29. 在AndroidManifest.xml中聲明類
- 30. 在聲明中聲明的變量未在類範圍中聲明
不要在'B','C'和'D'聲明'x'。 – juanchopanza
你是什麼意思「不是每個類都有函數'x()'」?當使用對象'B','C'和'D'時,你想讓'x()'不可訪問嗎? – idanshmu