通过隐含的this指针,也可以实现运行时多态:
#include <iostream>
class A
{
protected:
int m_data;
public:
A(int data = 0)
{
m_data = data;
}
int getData()
{
return doGetData();
}
virtual int doGetData()
{
return m_data;
}
};
class B : public A
{
protected:
int m_data;
public:
B(int data = 1)
{
m_data = data;
}
int doGetData()
{
return m_data;
}
};
class C : public B
{
protected:
int m_data;
public:
C(int data = 2)
{
m_data = data;
}
};
int main()
{
using namespace std;
C c(10);
cout << c.getData() << endl; // 1
return 0;
}
这里打印的结果是1,调用的是B中的getData函数;那为什么输1呢?多态不应该是在使用指针或引用的时候,才会出现咩? 对象c不是指针调用啊, 我认为c调用的是 A中的getData,C和A不是直接继承,B中有虚函数,我感觉,C中也有指向父类的类指针,通过this指针调用函数传递的类对象指针,代码A可以这样描述:
class A {
protected:
int m_data;
public:
A(int data = 0) {
m_data = data;
}
int getData() {
return this->doGetData();
}
virtual int doGetData() {
return m_data;
}
};