1。公有继承中的多态公有继承:
多态就是同一个方法有多种行为,多种实现,它的行为随上下文的不同而不同。比如父类中有一个方法func(),子类中又重新定义了一个func(),虽然名字一样,但是函数行为不一样。
2。实现多态的方法有两种:1)在子类中重新定义;2)在父类中申明虚方法,然后在子类中重新定义
3。一开始我有点困惑,既然在子类中重新定义方法就可以实现多态,那为什么还要有虚方法的存在呢?
1)这个例子假设父类没有定义虚方法-------
fatherClass f("f",12,13);
childClass c("c",112,113);
fatherClass & b1=f;
fatherClass & b2=c;
b1.func();//调用的是fatherClass 的func()
b2.func();//调用的是fatherClass 的func()
2)这个例子假设父类定义了虚方法func()-------
fatherClass f("f",12,13);
childClass c("c",112,113);
fatherClass & b1=f;
fatherClass & b2=c;
b1.func();//调用的是fatherClass 的func()
b2.func();//调用的是childClass 的func()
以上的例子总结如下:
其实,虚方法是这样的:关键字virtual.如果没有虚方法,则根据指针或者引用的类型来调用方法;但是有了虚方法后呢,根据指针或者引用指向的类型来选择调用谁的方法(父类的还是子类的)。
4。一般来说,如果父类中定义了虚方法,那就应该再定义一个虚拟析构函数。
比如,假设childClass继承了fatherClass,并且添加了新的成员char *,该成员指向new 分配的内存。
fatherClass *ps=new childClass;
......
delete ps;//
这样只会释放childClass对象中由fatherClass 部分指向的内存,而不会释放char *指向的内存。
所以定义一个virtual ~fatherClass(){},这样就会先调用~childClass(),再调用~fatherClass().
5.友元函数不能是虚函数,因为友元函数不是类的成员函数。
6。如果子类重新定义了父类的方法,则应该保持原形一致。
7,如果父类的声明被重载了,则应该在子类中重新定义所有的父类版本;
8。protected:
个人认为其实protected介于public和private之间。首先,在一个类的派生类中,protected跟Public成员一样可以被访问;其次,对于外部世界来说,protected和private一样被隐藏。
9。要明白和熟悉继承机制的使用并不是那么容易的,我觉得需要大量的实际练习,类的设计很复杂,加油~~~~~~~你懂么?