当它在指针c ++中时如何使用继承类的真实功能

Posted

技术标签:

【中文标题】当它在指针c ++中时如何使用继承类的真实功能【英文标题】:how to use real function of inheritance class when it's in pointer c++ 【发布时间】:2017-06-03 18:39:11 【问题描述】:
class A
public:
    int aaa;
    A()aaa=0;
    void print() const;
;
class B : public A
public:
    int bbb;
    B()aaa=0,bbb=12;
    void print() const;
;

void A::print() const
    cout << aaa << endl;

void B::print() const
    cout << bbb << endl;


int main()
    A *ptr[2];
    ptr[0]=new B();
    ptr->print(); //it will show 0 from aaa but how to show 12 from bbb.

我想在 A 类中显示 12(在 B 类中:公共 A)而不是 0。 有人知道很多指针和继承和多态性,请帮助我知道如何感谢!

【问题讨论】:

您的代码无法编译。 “错误:预期';' '' 之前的两个位置。 将接受的答案的“虚拟”修饰符添加到 A::print() 后,您仍然可以使用显示的“ptr[0]->A::print()”访问 A::print A::aaa 的“0”。 【参考方案1】:

使用virtual 函数。换句话说:

class A
public:
    int aaa;
    A()aaa=0;;
    virtual void print() const;
;

【讨论】:

【参考方案2】:

您必须将函数设为虚拟。在函数定义中使用关键字virtual

【讨论】:

另外,ptr[0] 不是 ptr in ptr-&gt;print()【参考方案3】:

创建函数virtual,这将延迟函数名称与其主体的绑定。

virtual void print() const;

【讨论】:

以上是关于当它在指针c ++中时如何使用继承类的真实功能的主要内容,如果未能解决你的问题,请参考以下文章

设计问题:如何最好地使用构图

当节点不在视图中时如何删除它?

当它被包装在提供者组件中时,如何使用 mocha + 酶 + chai 测试反应原生组件

asp.net c#.net jquery / javascript 如何使用复选框启用或禁用 requiredfieldvalidator

如何以编程方式更改复选框选中的颜色

当向量在内部类中时,如何删除指向对象的向量指针