多态——上课笔记

来源:互联网 发布:linux samba服务器配置 编辑:程序博客网 时间:2024/05/16 23:39
上节课思考题


1.什么时候使用单基继承?
在类型上是包含关系,可以用is来修饰的。此时全部继承基类的成员。(工程上使用较少)
2.什么时候使用多基继承?
是同类型的继承。如 父亲 母亲 孩子
3.继承与组合的区别
继承是整体关系不可或缺(如CPU对于电脑而言),组合是该类的部分(非必须)但是有可以扩展其功能(如键盘、鼠标对于电脑)。
4.组合的思想可有不足?
需要将其他类的对象作为成员,增加了其依赖性。
优点:扩展性好 维护性好 低偶合性(工程上常用)
5.修饰继承方式时,什么时候使用public、protected、private?
public:派生类继承基类的时候想基类权限修饰不变,能够任意使用基类的public类型成员和在当前类使用,并能够再派生时用。
protected:派生类在继承基类时,想在当前类和基类使用基类的public和protected类型成员,并能再派生。
private:派生类能继承基类的public和protected类型成员,但不能够再派生。
6.修饰成员时什么时候使用public、protected、private?
public:公有,都能调用成员
protected:只有当前类和其派生类能调用的时候
private:只有当前类使用(可以通过公有函数接口来间接使用)



笔记
1.隐藏
当派生类的成员变量与基类的成员变量同名时,派生类的成员变量会隐藏基类的同名变量—成员变量隐藏
当派生类的成员函数与基类成员函数同函数名时,派生类的成员函数会隐藏基类的所有同函数名的成员函数—成员函数隐藏
当派生类的成员函数与基类的成员函数同返回值、同函数名、同形参时——重写(工程上常用,是一种特殊的隐藏)

普通方法不能直接访问基类中被隐藏的成员。
派生类的对象、引用、指针访问被隐藏的成员时,要在成员前面加上“基类名::”。
2.重写(override)
当派生类的成员函数与基类的成员函数返回值、函数名、形参都想相同。
3.虚函数
virtual + 函数;
基类的虚函数被继承后仍是虚函数;
派生类中可以重写虚函数;
虚函数可实现动态关联;
使用对象的指针(或引用)去访问普通函数时,访问到的函数是指针所属类型中的函数。(普通函数看指针类型)
使用对象的指针(或引用)去访问虚函数时,访问到的函数是指针指向的对象的所属类的函数。(虚函数看指针值)

虚析构函数(解决内存泄漏)
    定义:virtual+析构函数 如果将基类的析构函数申明为虚析构函数,由该基类派生的类的析构函数也都自动生成为虚析构函数

基类指针P指向用new动态创建的派生类对象child,P = &child,删除对象分两种情况:
一、基类中的析构函数为虚析构函数,会删除派生类对象,再删除基类对象。
二、基类中的析构函数非虚析构函数,只会删除基类对象不回删除派生类对象,这样便出现了内存泄漏情况。

构造函数不能声明为虚函数,一般情况下基类的析构函数都会声明为虚函数以保证在撤销动态成排空间时能得到正确的处理。
4.纯虚函数
虚函数被初始化为0的函数,virtual void show()= 0;virtual 函数返回类型 函数名 (参数列表)= 0;
(=0不表示返回值为0,只起形式作用告诉编译系统这是纯虚函数)

5.抽象类
包含一个或一个以上纯虚函数的类。、
不能用抽象类创建对象,但能派生出派生类(能被继承纯虚函数,在派生类中可以实现基类的纯虚函数,如果不实现这个派生类也是抽象类)。
抽象类能创建指针、引用来执行它的派生类对象。
纯虚函数被派生类实现后就是虚函数。
0 0
原创粉丝点击