Boolan C++面向对象高级编程学习第三周
本周c++面向对象编程主要讲的是类于类之间的关系
1、复合(composition)
复合类又称组合类,是一个类里面的数据成员是另一个类的对象,即内嵌其他类的对象作为自己的成员。
这种一般是数据成员类具有该类的大量相同的特性,可以为该类提供接口
这种组合类是先调用成员类的构造函数进行构造,然后在执行自己本身的构造函数,而析构与之相反,先析构自己本身,在执行成员类的析构函数
2、委托(Delegation)
委托类和组合类的区别在于,类的数据成员时一个类的指针,这种相当于类里面只有一个指针的接口,真正的实现了数据(body)和接口(Handle)的分离
3、继承(inheritance)
前面两种只是一个类作为类成员或类成员的指针,为该类提供实现接口,但是继承则是一种is a的概念
继承分为 public,private,protect
这个我们一般用public方式来继承,相当于子类具有除私有父类私有的所有属性
这里子类的构造方式是先调用父类的构造函数,在调用自己的构造函数
析构函数则是先地哦啊用自己的,然后再执行父类的析构函数, 这里需要注意的是父类的析构函数必须是virtual的
这里我们类这个重要的继承特性,经常和虚函数这个特性来实现多态性,结合在一起使用
如果父类不是虚函数的话,那么子类可以调用父类的函数,但是不能写相同的函数
这里我们的虚函数有两种形式:
1、普通的虚函数
virtual void error(const std::String & msg);
这种父类的成员函数最前面加了virtual, 子类可以进行重新定义,或者不定义
2、纯虚函数
virtual void draw() const = 0;
这种父类的成员函数=0的方式,表示为纯虚函数,这是为了告诉后面的人要继承这个类,这个函数必须要重新定义
我们最后对委托的相关设计进行了简要的讲解
1、单数据源,多界面显示
2、文件系统
3、树状继承体系
这周的学习,让我对c++面向对象的特性有了更深人的了解,类与类的继承,通过比较类相同的特性来实现类的复用性,大大减少了代码的冗余度,提升了类的延展性
而委托这种特性,体现了类的封装的特性,非常有效的将接口与实现分离开来。