分享
 
 
 

C++ 读书笔记

王朝c/c++·作者佚名  2006-01-29
窄屏简体版  字體: |||超大  

注://后的内容是我自己加的注释。有些内容是从《C++程序设计语言》一书中引用。

第一章 概述

名字空间(namespace)是一种将程序库名称封装起来的方法。可以避免和应用程序发生命名冲突。

变量定义的构造函数语法:int num_tries(0);//用来处理多值初始化例:complex<double> purei(0,7);

c++支持3种浮点数类别,float单精度数,double双精度数,long double扩充精度数

template class机制,使程序员得以直到使用template class时才决定真正的数据型别。

在windows下以常量字符串表示文件路径时,必须以“转义序列”表示反斜线字符。

C++内建Bool类型用true/false表示真假值。

const定义的对象初始化后值不允许改变。

%取余。

Arrays(数组),Vectors(向量)

array的大小必须是常量表达式。

array初始化元素间隔用“,”

vector object必须含入vector头文件,定义方法:

const int seq_size=18;

#include <vector>

vector<int> pell_seq(seq_size);

其他用法vector和array相同。

迭代(遍历,iterate)

vector的初始化:

1、逐一初始化;

2、用已初始化的array作为vector的初值,vector<int> elem_seq(已初始化的数组,数组名+大小);

vector知道自己的大小。elm_seq.size()表示vector的大小。

vector是一种能赋值的简单对象(The C++ Programming Language (Special Edition))。

&的多重用法。

一个未指向任何对象的指针,其内含地址为0。

指向vector<int>的指针:vector<int> *pv=0;

随机化在标准函数库cstdlib的函数rand()和srand()。

srand(大小);//参数是随机数产生的种子(seed)

rand();

fstream文件操作

ofstream,如果文件不存在将产生一个文件作为输出用,如果存在则开启之做输出用,而文件中已存在的数据就会丢失。

如果不想丢弃原有内容则开启追加模式,ios_base::app

文件有可能开启失败,在写入操作前必须确定文件开启成功。

if(!outfile) // file定义的文件指针

if(outfile.fail()) //c++程序设计教程,钱能,清华大学出版社

控制器在iostream上执行某些操作,如:endl会插入一个换行字符,并清除输出缓冲区的内容

其他控制器:nex,oct,setprecision(n)//设定精度

文件的重新定位skeeg()

第二章 面向过程的编程风格

exit()需包含入cstdlib头文件

信任并非良好的工程原则

在函数声明中可以省略参数名称,只留函数类型。

传址(by reference)传值(by value)

调试器应用时可加上打印语句,用以追踪控制流程的逻辑并显示对象的状态。

当我们调用一个函数时,会在内存中建立起一个特殊的区域,称为“程序栈(program stack)”

引用所代表的对象不允许改变。

引用只是变量的一个别名而已。

如果在行参上加上const则函数将不能改动现参的内容。

new和delete的使用。用于堆内存heap memory的分配。

引用传值无法把默认值设为0。

当第二个参数设置为指针,并设定默认值后,在调用时可以以单一参数调用。

将调试信息输入到文件中,让cout成为默认的ostream参数:ostream & os=cout

默认参数右侧的所有参数必须也具有默认参数,否则属非法。

默认值只能指定一次,可以在函数声明处,也可在函数定义处,但不能够在两个地方都指定。

内联(inline)函数,声明为inline的函数,编译器在每个函数调用点上将函数内容展开。一般内联函数的定义常常被置于头文件中。inline函数只是一个请求。

提供重载函数(Overloaded Functions),参数表(parameter list)不同(可能时参数类型不同,也可能是参数数目不同)的两个或多个函数,可以拥有相同的函数名称。但编译器无法根据返回值类型来区别两个据有相同名称的函数。

模板函数(template functions),template<typename elemtype>关键字typename表示elemtype在函数中乃是一个临时放置型别的代称,elemtype是任意的名称。

函数的定义只能有一份,不过函数的声明倒是可以有许多份。

inline函数的定义可以多份,为了扩展inline函数的内容。

第三章 泛型编程风格

欲使用泛型算法需含入algorithm头文件

Standard Template Library (STL)主要由两种组件构成:一是容器(container)包括vector,list,set,map等类。另一种组件是用以操作这些容器类的所谓泛型算法(ganeric algorithm)包括find(),sort(),replace(),marge()等等。

vector和list是序列容器。map和set是关联容器。

所谓泛型算法,提供了许多可施行于容器类及数组型别上的操作行为。他们和他们要操作的元素型别无关。

数组做行参,仅将第一个元素的地址传入。等价于一个指向数组首地址的指针。我们可以再定义一个元素用来表示数组的终点(数组的最后一个元素的下一个地址),我们称之为“哨兵”

泛型指针(Iterators)

每个标准容器都提供一个begin()的操作函数指向第一个元素,另一个end()的操作函数指向最后一个元素的下一个位置,他们都返回一个iterator。容器提供insert()用以安插元素,提供erase()用以删除元素。

泛型的定义形式 itarator<vector,string>iter;

vector<string>::iterator iter=s.begin();

所有容器的共通操作

equality(==)和inequality(!=)

assignment(=)复制

empty()容器无元素时返回true

size()传送容器当前含有的元素数目

clear()删除所有元素

insert()安插函数

序列式容器deque

定义序列式容器对象的方式

1、产生空的容器:

list<string>slist;

vector<int>ivec;

2、产生特定大小的容器:

list<int>ilist(1024);

3、产生特定大小的容器,并为每个元素指定初值:

list<string>slist(16,"内容");

4、通过一对iterators产生容器:

int ia[8]={1,2,3,4,5,6,7,8};

vector<int>fib(ia,ia+8);

5、根据某个容器产生新的容器。

list<string>slist;

//内容

list<string>slist2(list);

提供两个特别操作函数,允许在容器末尾进行安插和删除操作:push_bach()和pop_back()。

另外list和deque(但不包括vector)还提供push_front()以及pop_front。

this指针在meber function内用来寻址其调用者。内部运行过程是,编译器自动将this指针加到每一个member function的参数表中。由于内部代码转换,tr1.copy(tr2);将变为copy(&tr1,tr2);

在member functions内,this指针可以让我们取用其调用者的一切。

返回调用的对象只要简单的提领指针即可。return *this;

判定两个对象是否是相同,再次运用this!=&rhs即可

静态的类成员,static data members用来表示唯一一份可共享的members。他可以在同类型的所用对象中被存取。被声明为 static 的数据成员是一类特 殊的共享数据成员 无论这个类的对象被定义了多少个 静态数据成员在程序中也只有一份

//意思是,所有对象将都调用同一个类成员的内存空间。而不是单独的内存空间。

//在类中指定初值的一般方法:1、=直接赋值2、函数赋值法aa(67);3、在类的构造函数中加入:后进行上述复制。

像const static int data members,可以在声明时为他明白指定初值。

members function只有在“不存取任何non-static members”的条件下才能够被声明为static,声明方式是在声明式之前加上关键词static。

运算符重载 operator 例如: inline bool operator==(const triangular &rhs)const{return _index==rhs._index;}

运算符重载必须至少有一个参数为class类型。

引用是一种没有 指针语法的指针//C++primer3eSC

//函数重载[]的实现。

//#include <cassert>

// using namespace std;

// int& IntArray::operator[](int index){

// assert(index>=0&&index<size);

// return ia [index];}

//(c++ primer3eSC的实现)

尽管C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。

在标准C++中,数组类是C++标准库的一部分,叫做向量(vector)。

vector类提供了一对begin()/*开始处*/和end()/*结束处后1个*/

泛型算法中参数要用起始地址加上偏移量

大部分泛型算法都包含在头文件algorithm中

c++提供了一套位操作符以支持位操作,以及一个位集合(bitset)容器类型,可以用来声明含有位集合的对像。

宽字符类型wchar_t 样式:L'a'

C++支持两种形式的初始化

第一种形式是使用赋值操作符的显式语 法形式

int ival = 1024; string project = "Fantasia 2000";

在隐式形式中 初始值被放在括号中

int ival( 1024 ); string project( "Fantasia 2001" );

const对象的地址只能赋值给指向const对象的指针。但是,指向const对象的指针可以被赋以一个非const对象的地址。

引用一旦被定义就不能再指向其他对象。

特别是异常类的层次结构,它可以用来将异常进行分组,从而使一段处理代码能够只在适当的细节层级上处理错误。

一个namespace是指一个具名的范围(named scope)。namespace被用来将相关的声明划归在一起,将不相关的代码部分隔开。

C++规定:在一个特定的namespace内部,即使不做显式的限定,也默认为该namespace中所包含的对象名称是有效的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有