1.21 C++复习
------------恢复内容开始------------
------------恢复内容开始------------
1. 一个变量数值上设定存在两阶段。初始化->赋值。
2. overloading的函数不能有歧义。
complex(double a=0, double b = 0) //有初始值 可以被覆盖也可以无参数构造。 eg: complex c1() ;
3. double real() const { return re; }. //表示此函数不改变 object内部数据内容
4. friend 函数名() //指明友元函数所能操纵的private data
5. 操作符就是一种函数, c1 += c2 (c1为左操作数,c2为右操作数)。重载的时候查看左操作数是否重写函数。
6. 成员函数参数中藏有一个this pointer(指向调用者)
7. return by reference。
8. 拷贝函数和拷贝赋值,默认是1bit,1bit复制。
9. complex c1(1,2)// 空间开辟在stack上,被称为localobj,析构函数自动调用
new 分成3步:1. 分配空间(调用void* mem = operator new(sizeof(Class)) 约等于 malloc
2. 转型 pc = static_cast<Complex*>(mem);
3. 调用构造函数 pc->Complex::Complex(1,2); //Complex::Complex(this,1,2) 成员函数woc,他个der含有一个thispointer
delete 分为两步:
1.调用析构函数 String::~String(ps); //
2.释放内存 operator delete(ps); //底层调用free
PS:new array[N] 需要对应 delete array[N]; 目的是调用足够数量的析构函数。
10. 不属于任何一个scope的被称为全局对象。
Static function. 与一般函数一样只在内存中有一个,但自身不具备this指针,他只能处理静态数据。
static的调用:1. 通过obj 2. 通过 classname 调用。
Static variable class内声明,class外定义。 只有在定义的时候才分配内存 //且只存在一份
函数内创建过 static variable之后,才会创建。
11. funciton template(函数模版)
------------恢复内容结束------------
设计模式(composition 复合)
1. adapter(适配器)
container ---> component // 容器含有一个内在类
构造时,先构造内部component 再构造外部container。//默认component的构造函数调用default版
析构时,先析构外部container 再析构内部component //相反
2. Delegation(委托)(composition by reference)
container ----> component //容器中含有一个 pointer 指向component
与composition 复合不同的地方,内部所含的component 其生命开始不一定是随着container的出现而出现,而是在真正调用的它的时候才出现
copy on rid. 在需要修改的瞬间,复制出一个。
3. Inheritance()
public 继承(还可以 private protected继承),创建子类前先得有父类,顾会先调用父类constructor。//析构则由外而内,
因此,父类的deconstructer 必须是虚函数。 只有这样,才能在释放子类的时候动态绑定到他
虚(virtual)函数
virtual (return type) func() =0 //纯虚函数,子类一定要定义
virtual (return type) func()// 有定义,子类不一定要重写,只是被开放了权限
non-virtual 函数则不希望子类重写
Delegation + inheritance
文件系统设计模式 //primitive 类比文件item,composite类比目录。目录中既需要文件有需要子集目录。
Prototype 模式。(hard 不理解。)
------------恢复内容结束------------