Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41544
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 52
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-18 21:17
文章分类

全部博文(5)

文章存档

2016年(3)

2013年(2)

我的朋友

分类: C/C++

2016-03-21 21:43:48

面向对象思想(类和类之间关系),下面都是面向对象的一部分
1.继承Inheritance,表示is a
三种继承:public, private, protected
Struct _List_node: public _List_node_base
Base Class的析构函数必须为virtual function,否则会出现undfine behavior(先记住,后面会有理解的)
构造由内而外;子类有父类的东西,能够使用父类的函数
Derived的构造函数首先调用Base的default构造函数,然后再执行自己
如果不想使用父类的默认构造函数,那么就要手动写了
Derived::Derived(..):Base(){..}


析构由外而内
子类要执行自己,然后再调用Base的。




2.复合Composition:表示has a. A(Container) Has a B (Component)
生命周期同步,同一
Adapter:特例,B具备了强大功能,A实际上调用了B。就是只是修改了一个面貌;
构造和析构:
先调用内部Component的默认(必须是默认!)构造函数,然后再执行自己的
Container::Contaier():Component(){...}   -->initialization list先执行-->Component()是编译器自己加上去的,但只能是默认构造函数,可以不写;如果调用的不是默认构造函数,要自己写
析构由外而内,首先执行自己,然后再调用Component
Container::~Container():{... ~Component()}


3.委托Delegation/Composition By reference   A has a refernce points to B(即使是指针在传,但也必须说成reference)--->pointer to implementation (pimpl)
生命周期不是同步的
这样的手法可以使得可以修改B而不影响A的用户,另外可以实现共享,但是共享中其中一个要修改内容,要实现Copy On Write




Inheritance with Virtual Function
在任意成员函数前加virtual,就成了虚函数。
函数继承其实继承的是调用权


non-virtual: 不希望子类重新定义(override).
virtual:希望子类重新定义,并且函数自身有默认定义。
pure virtual:希望子类一定要重新定义(override),因为父类本身没有实现函数!  pure function 后面有个=0!


关键动作用virtual,由子类重新定义(override),这种方式叫Template Method(设计模式之一)
对于做框架用virtual实现非常方便子类继承


 
 Inheritance 和composition 复合关系下的构造和析构
 子类继承父类,子类has a Component;先调用Base类,再调用Component,最后再创建子类.??(要自己实验做出来)


 子类继承父类,父类has a Component:那么就需要先Component,再Base,然后创建子类!


 Delegation + Inheritance
 Subject has reference to many observers。observer可以被继承








Prototype:能够创建未来的子类!所有对象都必须通过原型(父类)来创建,不能通过子类直接创建!
子类继承父类后,自己创建自己类型的对象,并登记到父类(父类有空间,子类放进去)
-:private
#:protected
+:public(可以省略)


Design Patterns Explained Simply


类声明里面的static函数,static变量只是声明,不是定义(分配内存)。在类外全局域里面进行定义以分配内存!
在类里面可以声明一个类型是自己的类.(链表)






阅读(1935) | 评论(0) | 转发(0) |
0

上一篇:第二周笔记

下一篇:没有了

给主人留下些什么吧!~~