关于C++多态的理解

多态,即多种形态。对于具有继承关系的一类对象,子类表现出了父类的某些特性,但是表现的不一样,这就是多态的现实体现。例如动物可以发声,但是狗是旺旺,狗是动物的一种,但是表现了不同的叫的特点,这就是多态。

若class B:public A

A* a=new B();对于这句话该怎么理解?

1.A* a规定了要分配的存储空间类型是类A的类型,该内存空间只能包含类A规定的属性和方法,A的继承类B以后添加的方法都没有包含进来。

2.new B()规定了被实例化的对象是B的实例对象,即是类B被分配了内存空间

1和2两个规定求交集(红色文字求交集),表明B中只有继承自A的方法和属性才能被调用B自己后来添加的新方法是不能被编译通过的,因为该内存空间没有空间分配给除类A以外的方法了。

因此c++规定:

1.如果方法需要被重写,那么最好加上virtual关键字,因为该关键字是实现多态的关键,不加也可以覆盖子类方法,但是缺少规范性;

2.不加virtual的方法,严格上讲最好不要被重写。

对于变量的理解:

type a;

type限定了该变量空间所存储变量需要遵守的规则,如对于int类型需要分配多大的空间;对于class类型,规定了为哪些方法和属性分配空间。

原文地址:https://www.cnblogs.com/zhuluqing/p/8757599.html