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

课堂摘要

1.只要类中有指针,必有big three。

2.自我幅值这个动作需要检测是否存在重复赋值的情况。

3.构造函数一般不显式调用,而在创建一个对象时,构造函数被自动调用。

4.默认构造函数很重要,若没有则无法构造数组。

5.如果一个类没写任何构造函数,则编译器隐含地为其生成。

6.构造时,成员被依次构造(从前到后);先执行成员的构造函数在执行自己的,即123321.

7.析构时,成员被依次析构(从后到前);先执行自己的析构函数,再执行成员的。

8.若new时用了[ ],delete时也要用[ ].

9.用new申请的内存,必须用delete释放。

10.class类型必须用new/delete创建,销毁。

11.含有默认构造函数的类,才可能用new [ ]一次性地创建多个对象。

12.拷贝构造函数从来不显式调用,而是用编译器隐式调用。

13.所谓深度拷贝即去拷贝数据而不是指针。

14.友元的权利:可以无限访问该类的所有成员。

15.new是先分配memory再调用ctor。

设计模式

C++设计模式——简单工厂模式

C++设计模式——工厂方法模式

C++设计模式——抽象工厂模式

C++设计模式——单例模式

C++设计模式——建造者模式

C++设计模式——原型模式

C++设计模式——适配器模式

C++设计模式——桥接模式

C++设计模式——组合模式

C++设计模式——装饰模式

C++设计模式——外观模式

C++设计模式——享元模式

C++设计模式——代理模式

C++设计模式——职责链模式

C++设计模式——命令模式

C++设计模式——解释器模式

C++设计模式——迭代器模式

C++设计模式——中介者模式

C++设计模式——备忘录模式

C++设计模式——观察者模式

C++设计模式——状态模式

C++设计模式——策略模式

C++设计模式——访问者模式

C++设计模式——模板方法模式

可以看出C++的设计模式种类繁多,也是之后需要学习的重点所在。

Big Three Function Design - 三大函数设计

C++三大函数:

析构函数

复制构造函数

operator=

析构函数

函数模样:~S()

当一个对象超出作用域或执行delete的时候,析构函数就被调用。

复制构造函数

函数模样:S(const S& s)

以下情况,复制构造函数均会被调用:

声明的同时初始化:

S s1 = s2;  //注意此时虽然出现=,但是不是调用operator=哦

S s1(s2);

调用函数时使用按值传递(而不是按引用传递)

void f(S s);

S s1;

f(s1);

通过值返回对象

S f()

{

S s1;

return s1;

}

operator=

函数模样:const S& operator=(const S& s)

当=应用于两个已经构造的对象时,就调用复制赋值运算符operator=。

S s1;

s1 = s2;    //注意与S s1 = s2; 的区别

注意事项:

三大函数不手动实现的时候,会使用默认的版本。比如operator=的默认版本会依次为数据成员复制,如果是基本数据类型自然没什么问题,但当数据成员含有指针的时候,operator的只会进行浅复制,即只是指针本身被复制,而不是指针所指向的内容被复制。见下例。

class S

{

public:

int *p;

S(int x=0){p=new int(x);}

};

void f()

{

S s1(2), s2;

S s3 = s1;

s2 = s1;

*s1.p=3;

cout << *s1.p << ' '<< *s2.p << ' ' << *s3.p << endl;//3 3 3

}

很明显这不是我们想要的,我们想让不同的对象的值不互相影响,此时需要实现深复制,见下例。

class S

{

public:

int *p;

S(int x=0){p=new int(x);}

S(const S& rhs)

{

p = new int(*rhs.p);

}

const S& operator=(const S& rhs)    //rhs=right-hand side

{

if (this != &rhs)  //检查是否复制自身

*p = *rhs.p;

return *this;

}

};

void f()

{

S s1(2), s2;

S s3 = s1;

s2 = s1;

*s1.p=3;

cout << *s1.p << ' '<< *s2.p << ' ' << *s3.p << endl;  //3 2 2

}

Reference

C++三大函数(The Big Three) - Norcy - 博客园

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容