1,多态指的是通过基类的引用或指针访问派生类,从而表现出不同的行为。
2,多态不是指属性(field)的多态,而是指行为上的多态!
-
#include <iostream>
-
using namespace std;
-
-
class A
-
{
-
public:
-
A(int i = 0)
-
{
-
v = i;
-
}
-
-
virtual int get_val() const
-
{
-
cout << "virtual int A::get_val() const" << endl;
-
return v;
-
}
-
//private:
-
int v;
-
};
-
-
class B : public A
-
{
-
public:
-
B(int i = 0)
-
{
-
v = i;
-
}
-
// inheriting constructor
-
//using A::A;
-
-
int get_val() const override
-
{
-
cout << "int B::get_val() const override" << endl;
-
return v;
-
}
-
//private:
-
int v;
-
};
-
-
int main(void)
-
{
-
B b1{2};
-
A *pa1 = &b1;
-
A a1 = b1;
-
-
cout << pa1->get_val() << endl;
-
cout << pa1->v << endl;
-
cout << a1.get_val() << endl;
-
cout << a1.v << endl;
-
-
return 0;
-
}
输出结果:
int B::get_val() const override
2
0
virtual int A::get_val() const
0
0
由结果可以看出,通过A的指针pa1访问B的实例b1时,表现出的是B的行为(
int B::get_val() const override),
但是通过pa1访问得到的却是A的属性v,而不是b1的属性。
阅读(1140) | 评论(0) | 转发(0) |