C++ 和抽象类中的继承

标签 c++ class inheritance abstract

我在正确处理存在抽象类的地方重写方法时遇到问题 在我的类层次结构中。 我将尝试解释:

class AbstractClass{
public:
    virtual void anyMethod() = 0;
};

class A : public AbstractClass {
    void anyMethod() {
        // A implementation of anyMethod
        cout << "A";
    }
};

class B : public AbstractClass {
    void anyMethod() {
        // B implementation of anyMethod
        cout << "B";
    }
};

AbstractClass *ptrA, *ptrB;

ptrA = new A();
ptrB = new B();
ptrA->anyMethod();  //prints A
ptrB->anyMethod();  //prints B

好的..前面的例子工作正常..抽象类的具体实现 方法 anyMethod 将在运行时调用。 但是 AbstractClass 派生自另一个基类,该基类的方法不是虚拟的 称为任何方法:

class OtherClass {
public:
    void anyMethod() {
        cout << "OtherClass";
    }
};

class AbstractClass : public OtherClass {
public:
    virtual void anyMethod() = 0;
};

//A and B declared the same way as described before.

现在,如果我尝试这样的事情:

ptrA = new A();
ptrB = new B();
ptrA->anyMethod();  //prints OtherClass
ptrB->anyMethod();  //prints OtherClass

我误会了什么? 是否有任何解决方案可以使 ptrA 和 ptrB 打印 A 和 B 而无需使用 cast、typeid 等?

最佳答案

你为什么不这样做:

class OtherClass 
{
    public:
    virtual void anyMethod()
    {
       cout << "OtherClass";
    };
}

这应该可以解决你的问题

关于C++ 和抽象类中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785207/

相关文章:

r - R中S3类的重载矩阵乘法

java - 为什么要避免使用 final 关键字?

java - 在 main 方法的类中扩展 Frame 类

c++ - QLayoutItem与QWidget的Qt Layout关系

jQuery 以 CSS 为目标 a :hover class

c++ - 多重继承来自多重继承

php - 如何在 PHP5 : $this->foo->bar->baz() 中链接对象

java - Java 中继承的坏例子是什么?

c++ - std::unique_ptr 中的不可复制删除器

python - 编译和运行后 boost python 给我段错误