C++ 从基类指针调用子类方法?

C++ 从基类指针调用子类方法?,c++,polymorphism,overriding,C++,Polymorphism,Overriding,我不知道该给什么标题,我希望更有经验的stackoverflow.com用户能够改进它 假设我们有A级 class A { void hello(){ cout << "i'm an A" << endl; } } 为什么数组[1].hello()不存在输出我是B因为我们为那个基类指针实例化了一个B对象?如何做到这一点 您必须使hello成为一个虚拟函数: class A { virtual void hello() { cout << "i'

我不知道该给什么标题,我希望更有经验的stackoverflow.com用户能够改进它

假设我们有A级

class A {
  void hello(){  cout << "i'm an A" << endl; }
}

为什么
数组[1].hello()不存在输出
我是B
因为我们为那个基类指针实例化了一个
B
对象?如何做到这一点

您必须使
hello
成为一个虚拟函数:

class A {
    virtual void hello() { cout << "i'm an A" << endl; }
};

class B : public A {
    virtual void hello() override { cout << "i'm a B" << endl; } // 1) 
};
A类{

virtual void hello(){cout您必须使
hello
成为一个虚拟函数:

class A {
    virtual void hello() { cout << "i'm an A" << endl; }
};

class B : public A {
    virtual void hello() override { cout << "i'm a B" << endl; } // 1) 
};
A类{

virtual void hello(){cout此处有几处更改:

在类A中创建函数hello,A
virtual
public:
,因为默认情况下它是
private

class A {
public: 
virtual void hello(){ cout << "i'm an A" << endl; }
};

这里有几个变化:

在类A中创建函数hello,A
virtual
public:
,因为默认情况下它是
private

class A {
public: 
virtual void hello(){ cout << "i'm an A" << endl; }
};

由于继承了类B中的类A,派生类B将从基类调用函数。您需要重写类B中的函数,因为您要更改基类功能

您可以使用override和virtual关键字执行此操作


由于继承了类B中的类A,派生类B将从基类调用函数。您需要重写类B中的函数,因为您要更改基类功能

您可以使用override和virtual关键字执行此操作


< /P>因为你没有声明它是虚拟的。请看C++默认值,以最小的,最严格的可能解释。如果你想要花样的技巧,你必须告诉它。因为你没有声明它是虚拟的。请看C++的默认值,以最小的,最严格的可能解释。如果你想要花样的技巧,你必须告诉它。我看,我错了,我总是你。这就是

virtual
是C++对
abstract
方法的关键词it@reaffer:部分正确:抽象方法只有在虚拟的情况下才有意义。因此,您将始终在抽象方法声明前找到Abstract关键字。告诉编译器方法不仅仅是虚,但也抽象,在C++中,是在声明后添加<代码>=0 < /代码>。我看,我错了,我一直认为<代码>虚拟<代码>是C++的关键字,用于<代码>抽象>代码>方法。现在我得到了正确的图片。it@reaffer:部分正确:抽象方法只有在虚拟的情况下才有意义。因此,您将始终在抽象方法的声明前面的抽象关键字。告诉编译器一个方法不仅是虚的,而且是C++中的抽象,在声明之后添加<代码>=0 < /代码>。
class B: public A {
virtual void hello(){  cout << "i'm a B" << endl; }
};