Week3(Boolan)

基于对象的设计OOD--------->面向对象的编程OOP(类之间的关系)

复合Composition:设计模式Adapter,选择功能已经很强大的类中的一些函数开放,更改名字或接口

template >

...

protected: Sequence c;//底层容器,即deque c;

queue先进先出,deque两端都可以进出。

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

Container::Container():Component(){...};//Component内可能有多个构造函数,当不想使用默认的构造函数时,斜体加粗部分需指明哪些参数。



Week3(Boolan)_第1张图片

委托Delegation

也是“拥有”的关系,但是通过指针,也叫Composition by reference。生命周期与Composition不同,指针指向的class被需要时才会被创建。

Week3(Boolan)_第2张图片

pimpl( pointer to implementation) 别名 Handle/Body,编译防火墙:

指针指向不同的实现类,服务器端如何实现都不影响客户端

引用计数:

三个字符串共享“Hello”的内容,节省内存。如果想通过指针a更改"Hello"的内容,则copy一份给a改,copy on write.


Week3(Boolan)_第3张图片

继承inheritance

形式:classname1 public: classname2:{}

三种继承:private、protected、public.

父类base的数据被完整继承到子类derived(通过内存),函数的继承是通过继承调用权。子类包含父类的一部分,和复合相同,构造由内(父类的构造函数)而外(子类的),析构由外而内。


Week3(Boolan)_第4张图片

虚函数virtual function

形式:在任何成员函数前都可加上virtual。

父类可以有多个子类,当成员函数被声明为纯虚函数时,所有子类都必须去定义它

Week3(Boolan)_第5张图片

设计模式Template Method:application framework与application分开,关键部分延缓放到子类里设计。通过子类对象调用父类函数。例如:MFC

mydoc.onfileopen(); 等同于 cdocument::onfileopen(&mydoc) mydoc作为this pointer

而在执行父类的函数时,遇到serialize();时,对编译器来说是this->serialize();

Composite:

在容器中存放的必须是相同大小的东西,如指针

包含自身和其他东西时,可设计两者的父类,使指针指向父类。

Prototype:

创建未来的子类,子类创建自己,而父类能够看到并复制子类,创建静态的自己---->调用私有构造函数,add prototype(this),将原型加到父类的原型容器中(自己允许调用自己的私有函数)----->clone函数(new一个自己),通过原型这个对象调用findandclone()来找到需要的原型指针来调用clone函数,再次调用clone函数new的自己需调用一个新的构造函数(protected或private都可以,可通过加一个用不到的参数和之前的构造函数区分开),静态函数虽然不需要对象就能调用,但需要class nameclass内的静态变量必须在class本体外做一次定义(给内存)

参考延伸资料

做作业时查的和QQ群里交流学到的

基类即父类,派生类即子类


有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

1.public继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public, protected, private

2.protected继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:protected, protected, private

3.private继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:

1.private成员只能被本类成员(类内)和友元访问,不能被派生类访问;

2.protected成员可以被派生类访问


using namespace std;//要写分号!!这也是我为什么总在int main()函数的int上看见提示 应输入; 。。。。。。

在VS2017里,项目里的文件改过名字后会提示错误“必须定义入口点”

这周作业还粗心大意地把前面声明的变量名字在后面引用时抄错了,时间紧迫也没来得及发现并改正了。。。。。。

在不作为右值赋给变量时,意思相同,但++i、--i比i++、i--更快速,效率更高

Week3(Boolan)_第6张图片

你可能感兴趣的:(Week3(Boolan))