[GeekBand] C++面向对象程序设计-1

从基于对象(Object Based)过渡到面向对象(Object Oriented)是 C++ 面向对象程序设计的学习主线。

在基于对象部分通过对 C++ 两种不同的类——class without pointer member 和 class with pointer member的剖析,掌握了单一 class 的设计方法。

在面向对象部分通过阐释 classes 之间的三种主要关系——复合(Composition)、继承(Inheritance)和委托(Delegation),进而掌握多重 classes 的设计方法。

C++程序代码的基本形式:声明类的头文件 + 源文件 +  标准库的头文件。声明类的头文件需要有如下防卫式声明:

        #ifndef _H_INCLUDED

        #define _H_INCLUDED

        ......

        #endif  // _H_INCLUDED

头文件的布局包括:前置声明 (forward declarations)+ 类的声明 (class declarations)+ 类的定义(class definition)。类的声明包括类头(class head)与类体(class body)。类的成员函数有的定义在 class body 之内,自动成为内联函数(inline function)候选人,有的则定义在 class body 之外。 

类中的成员分为数据成员和函数成员,类中的成员可分为共有、保护和私有成员,他们分别放在访问权限控制关键词 public、protected 与 private之后,以此限定其访问级别(access level)。一般将数据成员放在private之下以实现数据隐藏,默认情况下所有定义一个类中的成员是私有的。

类的每个新对象创建都需要调用其构造函数(constructor function),当创建的对象被删除时则需要调用析构函数(destructor funtion)。在构造函数的参数表中可以设置默认实参(default argument),在参数列表和函数体之间可以用初值列(initialization list)来初始化数据成员。构造函数可以重载(overloading),即函数具有不同类型的参数或具有不同个数的参数,编译器会根据参数的类型与个数为重载函数生成相异的实际名称。

class complex 

{

public:

    complex (double r = 0, double i = 0)

    : re ( r ), im ( i )

    { }

    complex ( ) : re ( 0 ), im ( 0 ) { }

    ......

}

如果将构造函数与拷贝构造函数均置于private之下,则不能创建新的对象实例,此时若能在类中创建一个静态私有数据成员来记录类的唯一对象实例,同时创建一个静态公有函数成员向外界提供这个唯一的对象实例,此时就形成了单例模式(Singleton)。

关键字 const 不仅可修饰普通的数据成员,还可以修饰对象成员和成员函数。使用const修饰的常量需要初值列来初始化。函数定义时在成员函数的参数列表与函数体之间加上关键字 const 则可以形成常量成员函数(const member function)。若两个函数名和参数都相同,但是其中一个函数被const修饰,则这两个函数互相重载。

常成员函数能由常对象(只有读权限)去访问,且不允许常成员函数修改对象的成员变量(没有写权限),所以不能调用非常成员函数,因为这些成员函数可能修改常对象中的成员变量。 而普通成员函数可以调用常成员函数。

1. 常对象只能调用常成员函数。

2. 普通对象可以调用常成员函数与普通成员函数。

3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针,常函数的this指针为常this指针。

4. 普通成员函数:既能调用普通成员函数,也能调用常成员函数;既能使用普通数据成员,也能使用常数据成员,但对常数据成员只用读权限。

5. 常成员函数:只能调用常成员函数;既能使用普通数据成员,也能使用常数据成员,但对常数据成员只用读权限。

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

推荐阅读更多精彩内容