所以,我有一个名为A
的类,其原型函数为x。 B
,C
和D
派生自A
,因此派生类的函数x也是原型。
现在我希望不是每个类都定义了函数x。
这在C ++中怎么可能?
答案 0 :(得分:1)
这违反了OOP原则。继承意味着一种关系。在您的示例中,B
,C
和D
是一种A
。如果A
有方法x
,则其他人也应该。{/ p>
如果不是这样,x
实际上并不是A
的方法(但是其中一个是后代')
如果x
只能从A
访问,请将其设为private
:
private: void x() {}
答案 1 :(得分:0)
您可能希望将x声明为纯虚函数,例如:
virtual void x() = 0;
答案 2 :(得分: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
}