GeekBand C++ week1

1.C++概述

面向对象:

学习classes间关系

继承inheritance、

复合composition、

委托delegation

语言复杂度上升,使得标准库越来越强大并日益成为编程工具的核心

推荐教材:

C++ Primer fifth edition(C++第一个编译器的实现者),

The C++ Programming Language fourth edition (C++之父),

Effective STL,

The C++ standard library the second edition,

STL源码剖析

C/C++ 代码对比

C 数据(单独的数据类型,全局数据,都可被函数房问)+函数(处理数据)

C++  class(数据和处理它的函数包装在一起) C++中 class与struct几乎完全相同

C 以数据的方式创建变量

C++ 以class为形式,创建对象

基于对象:

以良好的方式编写class

class without pointer members —— complex

数据:实型常量(实部、虚部)

函数:加、减、乘、除、共轭、正弦

在内存中对象结构包涵着完整的数据

class with pointer members —— string

数据:指针

函数:拷贝、输出、附加、插入

在内存中只有指针在对象结构里,字符串数据存放在指针指向的内存空间

Object Based : 面对的是单一class的设计

Object Oriented : 面对的是多重classes的设计,classes和classes之间的关系。

2. C++代码的基本形式

.h (header files)Classes Declaration #include "complex.h"

.h Standard Library #include

延伸名可能不一样甚至没有

-> C++中C的标准库对应+c在开头

.cpp

3.头文件中防御式声明(guard)

#ifndef __COMPLEX__

#define __COMPLEX__

...

...

#endif

防御式声明帮助coder不必关注包含头文件的次序,防止了重复包涵和编译

防御式声明内部的三部分:

0、forward declarations 前置声明

1、class declarations 类声明

2、class definition 类定义

先写1中class head/body 再去0补定义

4.class相关语法

类模板:template声明接下来定义的class为class template,可以在使用时再定义里边的变量类型

inline标识符:

有些函数在class body直接定义,默认含有inline标识符函数若在class body内定义完成自动成为inline候选人,函数太复杂就不能inline实现,

函数以inline书写只是建议编译器以inline方式编译

friend(友元标识符):

友元函数可以方位private域的数据

相同class的各个objects互为friends友元

const标识符:

const + typename (语法上可以颠倒顺序)常对象,常对象必须进行初始化,而且不能被更新,只能被常函数操作

return type + function name + arguments + const 常成员函数

常对象只能调用常成员函数;

常成员函数调用期间,目的对象都被视同为常对象,所以常成员函数不能更新目的对象的数据成员,常成员函数不会更改目的对象的数据成员的值。

常数据成员 const + typename

常引用 const +形参 所引用的对象不能被更新

访问级别:

public(function 外部调用) 可任意被外部访问

private(data) 只可被友元函数(由friend标识符提示)和同类对象访问

protect可被友元函数(由friend标识符提示)和同类对象访问,且可被子类访问。

不一定集中书写同一访问级别的信息,可以分开声明并书写,不声明且没有访问域信息时默认为private

外部不能直接访问class的private数据,数据一定要通过函数访问和修改——封装

构造函数:构造函数(ctor),如果你想要创建一个对象,自动被调用的函数

构造新对象的三个方式:构造函数(赋值/默认) 动态创建(得到指针)

构造函数名称与类名称一致,可以拥有参数,参数可以有默认值(default argument),没有返回值类型(return type),(其它函数也可以写出参数默认值)

初值列(initialization list)(构造函数特有,功能可由写在函数体内的赋值语句代替,但是初值列更优) 格式”:数据名(参数名)“

初始化->赋值(assignments) 数据写入的两个阶段,不使用初值列即放弃了初始化,降低了程序效率

只能创建对象,不能直接调用构造函数

构造函数可以有很多个(相同函数名称多个函数实体——重载overloading),多种初值设定

多个同名函数会被编译器区分,函数名称 函数内参数(个数/类型)编码 以区分, 具体编译后编码取决于编译器

有默认值得参数不能通过省略它完成同名函数的区分

如果将构造函数的放在private域,则意味着该对象不能被从外部创建,设计模式——singleton(单例、单体、单件),用static A

3.pass by value vs. pass by reference (to const)

by value 整包传递,把所有值压入函数的栈,尽量避免,因为一些对象数据量比较大,这么做会给内存带来负担

by reference 类比C传递指针,reference引用(底层是一个指针 4bytes),但形式更好,最好所有参数传递都传引用(本质是为了效率),但注意和指针一样会修改原数据

by reference to const 在reference前添加const声明,避免原数据被改变,声明后,若需改变原值,则编译时会报错

return by value vs. reutrn by reference (to const) 尽量by reference,但注意有些情况不能用by reference

pass by reference的条件:多用于不改变原值得情况,大多数情况可用

return by reference的条件:运算结果存储在某一个参数中,如果以local variable存储函数处理结果,因为其易失性,只能传递value因为reference无意义

return by reference语法分析:传递者无需知道接收者是以reference形式接收

4.operator overloading(操作符重载):将操作符视为函数的一种,注意操作符函数具有左右参数在函数中的映射关系

实现方式:

成员函数:

所有成员函数都隐藏一个参数this(调用函数的对象),会把this是一个指针,传入调用对象的地址

this不能显式的在参数中给出,但可以在成员函数中调用

注意连串使用时,对函数返回类型的要求,一般与调用它的变量类型一致

非成员函数:无this pointer,且左值不一定为该类对象

”<<“重载,必须为全局函数,因为作用在cout(ostream class对象)上,cout事实上被<<不断改变,注意类型保持才能连续应用操作符,或者说,注意连续应用该操作符的条件

5.class body 外的各种定义

全局(全域)函数 无类名称 class尽量用reference传递

任何一个操作都可以定义为成员或全局函数,并无明显的优劣之分

6.temp object(临时对象) typename() 生命到下一行就结束了,因此无变量名,标准库中常用

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

推荐阅读更多精彩内容