在父类中声明并在子类中定义

Declare in parent class and define in child

本文关键字:定义 子类 声明 父类      更新时间:2023-10-16

所以,我有一个叫做A的类,带有原型函数x。 BCD都是从A派生的,所以派生类的函数x也是原型化的。现在我希望不是每个类都定义了函数 x。这在C++怎么可能?

这违反了 OOP 原则。继承意味着一种是-a关系。在您的示例中,BCD是一种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
}