C++ 从基类指针调用子类方法?
我不知道该给什么标题,我希望更有经验的stackoverflow.com用户能够改进它 假设我们有A级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'
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,Avirtual
和public:
,因为默认情况下它是private
class A {
public:
virtual void hello(){ cout << "i'm an A" << endl; }
};
这里有几个变化:
在类A中创建函数hello,Avirtual
和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; }
};