概述
标准C++中,如果main()函数没有显式地提供返回语句则它缺省返回
0。
#include 指示符读入指定文件的内容它有两种格式:
如果文件名用 尖括号< 和> 括起来,表明这个文件是一个工程或标准头文件, 查找过程会检查预定义的目录。
如果文件名用一对 引号括起来,则表明该文件是用户提供的头文件, 查找该文件时将从当前文件目录开始。
编译器自动定义了的 预处理器名字:__cplusplus,__STDC__,__LINE__,__FILE__,__TIME__,__DATE__。(前两者不会被同时定义)
给出两个数组,我们 不能用赋值操作符把一个数组拷贝到另一个中去
对象的动态分配可通过 new 表达式的两个版本之一来完成。
第一个版本用于分配特定类型的 单个对象,例如:
int *pint = new int( 1024 );
分配了一个没有名字的int 类型的对象,对象初始值为1024 。然后表达式返回对象在内存中的地址,接着这个地址被用来初始化指针对象,pint 对于动态分配的内存惟一的访问方式是通过指针间接地访问。
new 表达式的第二个版本用于分配特定类型和维数的 数组,例如
int *pia = new int[ 4 ];
分配了一个含有四个整数元素的数组,不幸的是,我们 没有办法给动态分配的数组的每个元素显式地指定一个初始值。
我们可以通过使用 delete 表达式的两个版本之一来 释放内存。
单一对象的delete 表达式: delete pint;
数组形式的delete 表达式: delete [] pia;
在类定义中被定义的成员函数如size() 会被自动当作是 内联函数
假设类IntArray有如下的构造函数:
explicit IntArray( int sz = DefaultArraySize ); 这就是其缺省构造函数。如果程序员提供参数,则该值将被传递给构造函数。例如:IntArray array1( 1024 ); 将参数1024 传递给构造函数。另一方面,如果用户不指定长度,那么构造函数将使用DefaultArraySize 的值(DefaultArraySize是类的一个static const成员)
不是所有的成员函数都能自动地随类模板的实例化而被实例化,只有真正被程序使用到的成员函数才会被实例化,这一般发生在程序生成过程中的一个独立阶段。
有如下声明:template <class elemType> class Array; 则对象定义 Array< int*& > pri( 1024 ); 是错误的。因为int*&是引用,在定义时必须初始化,而模板并未提供初始化的方法。
可以用by-value的方式来传递内建类型的参数,但是对于一般的对象应该使用by const reference的方式,可以减少开销。
如果异常机制按照函数被调用的顺序回查每个函数直到main()函数,仍然没有找到处理代码,那么它将调用标准库函数terminate() 。缺省情况下terminate()函数结束程序。
一种特殊的能够处理全部异常的catch 子句如下
catch( ... )
{
// 处理所有异常,虽然它无法访问异常对象
}
名字空间别名(namespace alias) 允许用一个可替代的、短的或更一般的名字与一个现有的名字空间关联起来。例如:
namespace LIB = IBM_Canada_Laboratory; // 提供一个更一般化的别名。
别名也可以用来封装正在使用的实际名字空间。在此情形下我们可以通过改变分配给别名的名字空间,来改变所使用的声明集,而无需改变通过别名访问这些声明的实际代码。
using 声明提供了选择更为精细的名字可视性机制,它允许使名字中间中的单个声明可见,这样可以避免引入其余没必要的声明。例如:
using IBM_Canada_Laboratory::Matrix; // 只让Matrix 可见
vector的不同初始化方法:
vector<int> vec1( size ); // 指定容量的vector
vector<int> vec2( size, value ); // 指定容量和初始值的vector
int ia[4] = { 0, 1, 1, 2 };
vector<int> vec3( ia, ia+4 ); // 利用数组来初始化vector
vector<int> vec4( vec2 ); // vector的拷贝构造函数
vector的遍历(利用begin()和end(),分别返回指向向量“开始处”和“结束处后1 个”的迭代器):
vector< int > vec( size );
vector< int >::iterator iter = vec.begin();
for ( int ix = 0; iter != vec.end(); ++iter, ++ix )
*iter = ix;
#include 指示符读入指定文件的内容它有两种格式:
如果文件名用 尖括号< 和> 括起来,表明这个文件是一个工程或标准头文件, 查找过程会检查预定义的目录。
如果文件名用一对 引号括起来,则表明该文件是用户提供的头文件, 查找该文件时将从当前文件目录开始。
编译器自动定义了的 预处理器名字:__cplusplus,__STDC__,__LINE__,__FILE__,__TIME__,__DATE__。(前两者不会被同时定义)
给出两个数组,我们 不能用赋值操作符把一个数组拷贝到另一个中去
对象的动态分配可通过 new 表达式的两个版本之一来完成。
第一个版本用于分配特定类型的 单个对象,例如:
int *pint = new int( 1024 );
分配了一个没有名字的int 类型的对象,对象初始值为1024 。然后表达式返回对象在内存中的地址,接着这个地址被用来初始化指针对象,pint 对于动态分配的内存惟一的访问方式是通过指针间接地访问。
new 表达式的第二个版本用于分配特定类型和维数的 数组,例如
int *pia = new int[ 4 ];
分配了一个含有四个整数元素的数组,不幸的是,我们 没有办法给动态分配的数组的每个元素显式地指定一个初始值。
我们可以通过使用 delete 表达式的两个版本之一来 释放内存。
单一对象的delete 表达式: delete pint;
数组形式的delete 表达式: delete [] pia;
在类定义中被定义的成员函数如size() 会被自动当作是 内联函数
假设类IntArray有如下的构造函数:
explicit IntArray( int sz = DefaultArraySize ); 这就是其缺省构造函数。如果程序员提供参数,则该值将被传递给构造函数。例如:IntArray array1( 1024 ); 将参数1024 传递给构造函数。另一方面,如果用户不指定长度,那么构造函数将使用DefaultArraySize 的值(DefaultArraySize是类的一个static const成员)
不是所有的成员函数都能自动地随类模板的实例化而被实例化,只有真正被程序使用到的成员函数才会被实例化,这一般发生在程序生成过程中的一个独立阶段。
有如下声明:template <class elemType> class Array; 则对象定义 Array< int*& > pri( 1024 ); 是错误的。因为int*&是引用,在定义时必须初始化,而模板并未提供初始化的方法。
可以用by-value的方式来传递内建类型的参数,但是对于一般的对象应该使用by const reference的方式,可以减少开销。
如果异常机制按照函数被调用的顺序回查每个函数直到main()函数,仍然没有找到处理代码,那么它将调用标准库函数terminate() 。缺省情况下terminate()函数结束程序。
一种特殊的能够处理全部异常的catch 子句如下
catch( ... )
{
// 处理所有异常,虽然它无法访问异常对象
}
名字空间别名(namespace alias) 允许用一个可替代的、短的或更一般的名字与一个现有的名字空间关联起来。例如:
namespace LIB = IBM_Canada_Laboratory; // 提供一个更一般化的别名。
别名也可以用来封装正在使用的实际名字空间。在此情形下我们可以通过改变分配给别名的名字空间,来改变所使用的声明集,而无需改变通过别名访问这些声明的实际代码。
using 声明提供了选择更为精细的名字可视性机制,它允许使名字中间中的单个声明可见,这样可以避免引入其余没必要的声明。例如:
using IBM_Canada_Laboratory::Matrix; // 只让Matrix 可见
vector的不同初始化方法:
vector<int> vec1( size ); // 指定容量的vector
vector<int> vec2( size, value ); // 指定容量和初始值的vector
int ia[4] = { 0, 1, 1, 2 };
vector<int> vec3( ia, ia+4 ); // 利用数组来初始化vector
vector<int> vec4( vec2 ); // vector的拷贝构造函数
vector的遍历(利用begin()和end(),分别返回指向向量“开始处”和“结束处后1 个”的迭代器):
vector< int > vec( size );
vector< int >::iterator iter = vec.begin();
for ( int ix = 0; iter != vec.end(); ++iter, ++ix )
*iter = ix;
转载于:https://www.cnblogs.com/anf/archive/2005/06/25/180891.html
最后
以上就是花痴乐曲为你收集整理的《C++ Primer 3rd edition》读书笔记 - 第一篇 C++概述的全部内容,希望文章能够帮你解决《C++ Primer 3rd edition》读书笔记 - 第一篇 C++概述所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复