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

时间:2014-02-26 19:40:22

标签: c++

所以,我有一个名为A的类,其原型函数为x。 BCD派生自A,因此派生类的函数x也是原型。 现在我希望不是每个类都定义了函数x。 这在C ++中怎么可能?

3 个答案:

答案 0 :(得分:1)

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