C++ c++;:使用派生类实例的基类指针调用基类虚函数
我有三个类:我可以访问唯一的基类指针,但这个指针实际上是一个派生类对象。我想使用这个基指针来调用基类虚函数C++ c++;:使用派生类实例的基类指针调用基类虚函数,c++,C++,我有三个类:我可以访问唯一的基类指针,但这个指针实际上是一个派生类对象。我想使用这个基指针来调用基类虚函数 class A { public: virtual void print() = 0; }; class B: public A { public: virtual void print() override { cout <<"I am B\n"; } };
class A
{
public:
virtual void print() = 0;
};
class B: public A
{
public:
virtual void print() override { cout <<"I am B\n"; }
};
class C: public B
{
public:
virtual void print() override { cout <<"I am C\n"; }
};
int main()
{
cout<<"Hello World\n";
A *a = new C();
a->print(); // prints "I am C"
//use pointer 'a' to print "I am B"
return 0;
}
A类
{
公众:
虚空打印()=0;
};
B类:公共A
{
公众:
virtual void print()override{cout在阅读一本书时,在两页之后发现了这个问题
class A
{
public:
virtual void print() = 0;
};
class B: public A
{
public:
virtual void print() override { cout <<"I am B\n"; }
};
class C: public B
{
public:
virtual void print() override { cout <<"I am C\n"; }
};
int main()
{
cout<<"Hello World\n";
A *a = new C();
a->print();
B *b = dynamic_cast<B*>(a);
b->B::print();
return 0;
}
A类
{
公众:
虚空打印()=0;
};
B类:公共A
{
公众:
virtual void print()override{我能相信你的问题对于自我回答来说太琐碎了,其他人可能对此不感兴趣。它也是重复的。在大多数答案中,基类方法是在派生类方法中使用类似base::method()的东西调用的。没有建议向下转换的答案。在我的代码中,不允许我修改派生类定义。这个问题的全部要点是,如何向下转换并使用基类指针调用虚拟函数。我在堆栈中的任何位置都找不到这个答案。这里有一个答案正好用于此。