注://后的内容是我自己加的注释。有些内容是从《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中所包含的对象名称是有效的。
分享到:
相关推荐
【C++读书笔记】 在深入理解C++的过程中,读书笔记是一种有效的学习方法,它能帮助我们整理思绪,巩固知识,并且在日后回顾时提供清晰的指引。以下是对C++编程语言的一些关键知识点的概述,这些内容可能涵盖在读书...
effective C++ 很好 很不错 最好的C++进阶资料
《C++读书笔记程序及源码深度解析》 在编程世界中,C++是一门强大且广泛应用的语言,尤其在系统软件、游戏开发、高性能计算等领域占据着重要地位。本资源包"**c++读书笔记程序以及源码**"提供了一个实践性的学习...
Effective C++读书笔记 本文总结了Effective C++读书笔记,涵盖了C++的四个主要次语言:C、Object-Oriented C++、Template C++和STL。同时,文章还讨论了高效编程守则,包括使用const、enum和inline替换#define,...
这份"C++读书笔记"无疑为学习者提供了一条系统性地掌握这门语言的道路。笔记作者凭借多年的实践经验,提炼出了一系列精华要点,旨在帮助读者避开陷阱,掌握高效编程方法。 1. **基础概念**:C++是一种静态类型的、...
从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++语言的联邦概念:C++是一个由多个次语言构成的语言联邦,这包括了C语言核心、面向对象的C++、模板C++以及标准模板库(STL)。这种理解对于深入...
C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
一本很好的C++学习资料,里面融合了学者的心血与精华
在学习C++的过程中,了解其基本语法结构和特性至关重要。本文主要涵盖了C++的几个关键概念,包括表达式、作用域、字符串、循环和计数、批量数据处理、程序组织、使用顺序容器以及字符串操作。 首先,我们来看C++中...
### C++ Primer 读书笔记概览 #### 操作系统与主函数 - **主函数返回值的意义**:操作系统依据`main`函数返回的值来判定程序执行的状态,其中,0值意味着程序成功运行至结束。非零返回值,具体含义由操作系统定义...
### C++ Primer 读书笔记概览 #### 一、程序入口与返回值 - **main()函数**: C++程序的入口点通常是`main()`函数。根据C++标准,`main()`函数可以没有显式的`return`语句。在这种情况下,程序会自动返回0,表示...
### 深度探索C++对象模型读书笔记 #### 一、引言 在深入探讨C++对象模型之前,我们先来明确一个概念——什么是C++对象模型?它包括两个层面的理解:第一层面是C++语言本身提供的面向对象编程的支持,这部分可以从...
"C++ Primer读书笔记" 本文总结了C++ Primer读书笔记的要点,涵盖了C++语言的基础知识,包括变量、基本类型、常量、输入输出等。 1. 变量和基本类型 C++语言中有多种基本类型,包括整型、浮点型、字符型等。在...
读书笔记:c++学习笔记C++ PrimerEffective C++剑指Offer鸟哥的Linux私房菜
《深入理解C++11》是一本探讨C++11新特性的书籍,其中涵盖了诸如右值引用、移动语义、完美转发、左值与右值的区分、POD类型、列表初始化、继承构造函数、委派构造函数以及类型推导等核心知识点。 **右值引用**是C++...
读书笔记涵盖的章节从11到20,涵盖了Qt开发中的多个关键主题。 首先,让我们从第11章开始,这是关于Qt的信号与槽机制的介绍。信号与槽是Qt的核心特性之一,它允许组件之间进行通信。当一个对象的特定事件发生时,会...
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷...此文档是该书的读书笔记。
effective C++ 读书笔记是 Scott Meyers 所著的一本经典C++程序设计书籍,本笔记总结了书中的要点,旨在帮助C++程序员编写高效、可靠的代码。本笔记将C++语言的特点和陷阱总结为90多条经验法则,涵盖了C++语言的...
这篇读书笔记主要涉及了C++编程中的一些关键概念和最佳实践,包括文件结构、防止头文件重复包含、文件搜索路径、内联函数、全局变量的避免、代码格式与可读性、以及编程规范等。 1. **防止头文件重复包含**:为防止...