在父类中声明并在子类中定义
Declare in parent class and define in child
所以,我有一个叫做A
的类,带有原型函数x。 B
、C
和D
都是从A
派生的,所以派生类的函数x也是原型化的。现在我希望不是每个类都定义了函数 x。这在C++怎么可能?
这违反了 OOP 原则。继承意味着一种是-a关系。在您的示例中,B
、C
和D
是一种A
。如果A
有方法x
,其他人也应该有。
如果不是真的,x
就不是一种真正的A
方法(而是它的后代之一)
如果x
只能从A
访问,请将其设为private
:
private: void x() {}
你可能想将 x 声明为纯虚函数,例如:
virtual void x() = 0;
假设你问什么,因为每个派生自 A 的类都会定义 x。如果您要求的是类 B、C 和 D 是按照 A 实现的(即它们将利用 A 的功能,但不能被视为 A 的实例),则可以在 B、C 和 D 中指定 A 的受保护或私有继承。
使用此方法的示例代码可能是:
#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
}
相关文章:
- 避免在C++中重复子类定义
- 使用子类覆盖基类中定义的函数
- C++ 确保子类为常量提供自定义值
- 如何为定义的情况创建子类?
- 如何在子类中重新定义数组大小?
- 无法使用在子类中定义的虚拟getter实现基类
- 运算符的歧义错误<<自定义 std::ostream 子类中的重载
- 是否有 lint 工具可以检查子类虚拟函数是否与父类定义匹配?
- 使用子类中的类型定义扩展模板类
- 模板化类继承的子类定义中的错误
- 从模板化类中的子类访问定义
- 使用基类构造函数的子类构造函数的大纲定义
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 在子类中定义可变参数函数专用化
- 如何使函数返回由子类定义的值?C++
- 子类ConstexPR类以获得不同的用户定义的转换行为
- 是否可以子类 std::unique_ptr 透明地应用自定义删除器
- 我有一个为 cpp 中的某个类定义的模板函数 - 不是 hpp.可以由子类使用吗?
- 在父类中声明并在子类中定义
- 子类化 vtk 样式:未定义的引用