Boolan Week3笔记

2017-11-06  本文已影响0人  Impluse

本周主要讲了

(1)Inheritance 继承

表示 is-a,代码 例如

class A

{ …};

class B: public A  // 用public继承较多,A为父类,B为子类

{…};

继承与虚函数一起使用最有价值,构造由内到外,析构由外到内。

base class 的 dtor 必须为 virtual , 否则会出现 undefined behavior。

(2)Composition 复合

表示 has-a,代码 例如

class Student

{

private:

string name;

valarray<double> scores;  //Student类,包含valarray类的成员。

};

复合构造由内而外,析构由外而内。

(3)Delegation 委托

Composition by reference. 代码 例如

Class A

{

private:

B*  refb;  // 用指针指向B类

};

A与B类不会同时创建,需要B类时才会创建。

(4)virtual function 虚函数

non-virtual函数:你不希望子类重新定义(override,复写)它。

virtual函数:你希望子类重新定义,并且你对它已有默认定义。

//用virtual去修饰成员函数即可使其成为虚函数

pure virtual函数:你希望子类一定要重新定义,你对它没有定义。

virtual void draw() const =0;

//纯虚函数子类必须全部定义后,父类才可以new。

//父类的析构函数必须为virtual。

//如果要想实现动态多态则必须使用虚函数

//普通函数不能是虚函数,也就是说这个函数必须是某一个类的成员函数,不可以是一个全局函数,否则会导致编译错误。

//静态成员函数不能是虚函数 static成员函数是和类同生共处的,他不属于任何对象,使用virtual也将导致错误。

//内联函数不能是虚函数 如果修饰内联函数 如果内联函数被virtual修饰,计算机会忽略inline使它变成存粹的虚函数。

//构造函数不能是虚函数,否则会出现编译错误。

部分引用于 http://www.cnblogs.com/jin521/p/5602190.html

上一篇 下一篇

猜你喜欢

热点阅读