Boolan-C++面向对象高级编程(上)第三周笔记
类与类之间的关系
一.继承 inheritance:is a (父[base]与子[derived]关系)
结构
构造函数由内而外derived::derived(……):base(){……}
析构函数由外而内derived::~derived(……){……~base() }
继承的方式:
1. Public继承
2. Private继承
3. Protected继承
函数种类:
1.非虚函数:不希望derive class重新定义
如:Int objectID() const;
2. 虚函数:希望重新定义 ,父类没办法写(但已有默认定义),只有子类写
如:Virtual void draw() const = 0 ;
3. 纯虚函数:希望derive重新定义(没有默认定义)
如:Virtual void error(const std::string& msg);
引入思想:Template method 应用框架,固定的先写好,未定的写成虚函数,留待子class完善
在application framework中,定义好框架,其中serilize()是未定的。在application中,实现了类CmyDoc的显示,但要跟之前的模板连接起来,使用virtual虚函数来定义。
在main函数中,整个的运行就是:创建一个CmyDoc文件,运行到打开myDoc时,调用框架中来实现,在CDocment中由于serilize部分具体实现在类CmyDoc中,所以转而调到CmyDoc,待serilize结束后,回到CDocment继续未完部分,CDocment完成后,再回到main完成程序的运行。
二. 复合composition:private中,类中有类(实)has a
结构:
构造函数由内而外container::container(……):component(){……}
析构函数由外而内container::~container(……){……~component() }
三.委托delegation:指针(虚)(composition
by reference)
小思考:
1. 构造:Derived::Derived(……):base(),component(){……}
析构:Derived::~Derived(……){……~base(),~component()}
2. 构造:base::base(……):component(){……}
Derived:: Derived(……):base(){……}
析构:Derived::~Derived(……){……~base()}
base:: ~ base(……){……~component()}
网友评论