Boolan-C++面向对象高级编程(上)第二周笔记

1、拷贝构造:

(1)含有指针的以定要使用深复制,浅复制会导致编译出错;

(2)深复制需要用new动态分配出一个新的空间,指向新的对象中的对应的指针,用这个新的空间来存放被复制的数即可;

注意:malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:

int*p;

p = new int;

//返回类型为int *类型(整数型指针),分配大小为sizeof(int);

或:

int *parr;

parr = new int[100];

//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;

而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。

(3)步骤:

i.非指针变量就按照=赋值;

ii.对于指针,动态分配空间指向指针;

iii.将需要赋值的指针所指向的数据赋值给新生成的空间;

2、拷贝赋值

与拷贝构造的操作类似,区别在于:

(1)如b=a,这种操作的前提是a和b都是该条语句之前就已经定义好的,而拷贝构造其实是初始化,有本质的区别;

(2)拷贝赋值,需要重载=运算符,返回值应为对象的引用,使用return *this即可;

(3)一定要检查是否自我赋值,否则一旦发生,就会出错;

if (this == &other)

{

    return *this;

}

3、析构

(1)名字是class名前加一个~;

(2)如果class中含有指针,且用new动态分配了空间,一定要用delete释放掉,否则会导致内存泄漏;

4、堆、栈

可以简单的理解为:堆是new动态分配所取得的空间,而栈是编译后固定得到的空间

5、new、delete

(1)new:先分配memory,后ctor;

(2)delete:先调用dtor,后释放memory;

(3)array new一定要搭配array delete;(也不是说不这样做就不对,但是建议这样做,避免出错)

6、调用static函数的两种方式

(1)通过object调用;

(2)通过class name调用;

7、对于static的成员变量,需要在类外做一个声明

如:class Account{

public:

    static double date;

};

double Account::data=0.0;

8、类模板

(1)如:template//用T来替代如:int、double等等;

(2)使用时,例:complexa,b;

9、函数模板

函数模板无需显示转换,由编译器自动完成;

10、命名空间

(1)using directive,如:using namespace std;

以后直接用cin>>、cout<<。。。。

(2)using declaration,如:using std::out;

以后可以直接使用out<<,但cin依然需要写成std.cin>>。。。。

你可能感兴趣的:(Boolan-C++面向对象高级编程(上)第二周笔记)