#include "iostream"
using namespace std;
class A
{
protected:
int data;
public:
A(int d=0)
{
data=d;
}
int getdata()
{
return dogetdata();
}
virtual int dogetdata()
{
return data;
}
};
class B:public A
{
protected:
int data;
public:
B(int d=1)
{
data=d;
}
virtual int dogetdata()
{
return data;
}
};
class C:public B
{
protected:
int data;
public:
C(int d=2)
{
data=d;
}
};
int main(int argc, char* argv[])
{
C c(10);
cout<<c.getdata()<<endl;
return 0;
}
这个结果输出是1,调用的是B中的dogetdata(),我想问的是多态性的实现其中一条是用基类指针调用,这个不符合要求啊,那么怎么还是实现了多态性呢
这个代码跟多态没有关系。
你在用c的实例调用dogetdata,调用的是c继承来的b的函数。
其实这个一个普通的继承。
貌似这样才能显示多态性吧:
int main()
{
A *a = new B;
cout<<a->getdata()<<endl;
return 0;
}
这个我倒是知道
似乎可以这么理解?调用getdata的时候 return dogetdata();等价于this->dogetdata。然后this为A类指针 即是父类指针,然后通过VTLB实现调用B::dogetdata