以下是引用naruto01在2011-5-28 01:26:17的发言:
现在已经看到第13章 复制控制。开始感觉比较吃力,希望自己可以坚持住。 在407页13.1.2上面一句,按照我的理解书上错了。网上查找资料,也没有提及。我的分析如下:
Sales_item item = string("9-999-99999-9");
Sales_item类有一构造函数:Sales_item(const string&)
如果这个构造函数被定义为explicit,那么上面语句的构造函数就不是显式的,应该初始化失败。对吧?
书中代码注释是:This initialization is okay only if the Sales_item(const string&) constructor is not explocot
但是下面中文翻译出:如果构造函数是显式的,则初始化失败;如果构造函数不是显式的,则初始化成功。
希望有哪位朋友可以指点一下。
欢迎各位朋友对我学习中的一些错误提出批评和指导。非常感谢你们的关注!
另外补充关于这个笔记的说明:我已经比较熟悉C,也之前看过一些国内的C++资料,大概也知道继承、重载等的概念,并且算是略读这本书,希望对C++有个权威、系统的了解。如果你感觉有点过于简略,那么也开始你的学习笔记之旅吧!
2011.5.27
第八章 标准IO库
当一个类继承另一个类时,这两个类通常可以使用相同的操作。
如果函数有基类类型的引用形参时,可以给函数传递其派生类类型的对象。
wchar_t类型的标准输入对象是wcin;标准输出是wcout;而标准错误是wcerr。
IO对象不可复制或赋值。
只有支持复制的元素类型可以存储在vector或其他容器类型里。
形参或返回类型不能为流类型。 如果想传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。
8.2.2给出代码中while(cin >> ival, !cin.eof()) 解释下逗号操作符的求解过程:首先计算它的每一个操作数,然后返回最右边操作数作为整个操作的结果。
flush操纵符不添加任何字符刷新流。 ends操纵符插入null。 endl输出一个换行符。
如果程序崩溃,则不会刷新缓冲区,所以使用endl是个良好的习惯。
使用tie函数可以将输入流和输出流绑在一起,任何读输入流的尝试都将首先刷新其输出流关联的缓冲区。
例如cin.tie(&cout); ostream *old_tie = cin.tie(); cin.tie(0);
IO标准库使用C风格字符串作为文件名。
在尝试打开新文件之前,必须先关闭当前的文件流。
如果遇到文件结束符或其他错误,将设置流的内部状态,以便之后不允许再对该流做读写操作。即使关闭流也不能改变流对象的内部状态。而调用clear后,就像重新创建了该对象。
ifstream infile;
ofstream outfile;
infile.open("in");
outfile.open("out");
//通常检查打开是否成功,是个好习惯
if(!infile && !outfile) {
cerr << "error: unable to open input or output file: " << endl;
return -1;
}
infile.close(); //关闭文件流
infile.clear(); //重置流状态
infile.open("next");
以binary模式打开的流则将文件以字节序列的形式处理,而不解释流中的字符。
以out模式打开的文件会被清空。如果要保存文件中已存在的数据,唯一方法是显示地指定app模式打开。
ofstream outfile("file", ofstream::app);
stringstream提供的转换或格式化:
该对象的一个常见用法是,需要在多种数据类型之间实现自动格式化时使用该类类型。
int val1 = 512, val2 = 1024;
ostringstream format_message;
//format_message内容:val1: 512\nval2: 1024\n
format_message << "val1: " << val1 << "\n"
<< "val2: " << val2 << "\n";
//自动将数值型数据的字符表示方式转换为相应的算术值
istringstream input_istring(format_message.str());
string dump;
input_istring >> dump >> val1 >> dump >> val2; //一般情况下,使用输入操作符读string时,空白符将会忽略(这里补充下空白符的概念:空格、制表符、垂直制表符、回车符、换行符和进纸符)
现在已经看到第13章 复制控制。开始感觉比较吃力,希望自己可以坚持住。 在407页13.1.2上面一句,按照我的理解书上错了。网上查找资料,也没有提及。我的分析如下:
Sales_item item = string("9-999-99999-9");
Sales_item类有一构造函数:Sales_item(const string&)
如果这个构造函数被定义为explicit,那么上面语句的构造函数就不是显式的,应该初始化失败。对吧?
书中代码注释是:This initialization is okay only if the Sales_item(const string&) constructor is not explocot
但是下面中文翻译出:如果构造函数是显式的,则初始化失败;如果构造函数不是显式的,则初始化成功。
希望有哪位朋友可以指点一下。
欢迎各位朋友对我学习中的一些错误提出批评和指导。非常感谢你们的关注!
另外补充关于这个笔记的说明:我已经比较熟悉C,也之前看过一些国内的C++资料,大概也知道继承、重载等的概念,并且算是略读这本书,希望对C++有个权威、系统的了解。如果你感觉有点过于简略,那么也开始你的学习笔记之旅吧!
2011.5.27
第八章 标准IO库
当一个类继承另一个类时,这两个类通常可以使用相同的操作。
如果函数有基类类型的引用形参时,可以给函数传递其派生类类型的对象。
wchar_t类型的标准输入对象是wcin;标准输出是wcout;而标准错误是wcerr。
IO对象不可复制或赋值。
只有支持复制的元素类型可以存储在vector或其他容器类型里。
形参或返回类型不能为流类型。 如果想传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。
8.2.2给出代码中while(cin >> ival, !cin.eof()) 解释下逗号操作符的求解过程:首先计算它的每一个操作数,然后返回最右边操作数作为整个操作的结果。
flush操纵符不添加任何字符刷新流。 ends操纵符插入null。 endl输出一个换行符。
如果程序崩溃,则不会刷新缓冲区,所以使用endl是个良好的习惯。
使用tie函数可以将输入流和输出流绑在一起,任何读输入流的尝试都将首先刷新其输出流关联的缓冲区。
例如cin.tie(&cout); ostream *old_tie = cin.tie(); cin.tie(0);
IO标准库使用C风格字符串作为文件名。
在尝试打开新文件之前,必须先关闭当前的文件流。
如果遇到文件结束符或其他错误,将设置流的内部状态,以便之后不允许再对该流做读写操作。即使关闭流也不能改变流对象的内部状态。而调用clear后,就像重新创建了该对象。
ifstream infile;
ofstream outfile;
infile.open("in");
outfile.open("out");
//通常检查打开是否成功,是个好习惯
if(!infile && !outfile) {
cerr << "error: unable to open input or output file: " << endl;
return -1;
}
infile.close(); //关闭文件流
infile.clear(); //重置流状态
infile.open("next");
以binary模式打开的流则将文件以字节序列的形式处理,而不解释流中的字符。
以out模式打开的文件会被清空。如果要保存文件中已存在的数据,唯一方法是显示地指定app模式打开。
ofstream outfile("file", ofstream::app);
stringstream提供的转换或格式化:
该对象的一个常见用法是,需要在多种数据类型之间实现自动格式化时使用该类类型。
int val1 = 512, val2 = 1024;
ostringstream format_message;
//format_message内容:val1: 512\nval2: 1024\n
format_message << "val1: " << val1 << "\n"
<< "val2: " << val2 << "\n";
//自动将数值型数据的字符表示方式转换为相应的算术值
istringstream input_istring(format_message.str());
string dump;
input_istring >> dump >> val1 >> dump >> val2; //一般情况下,使用输入操作符读string时,空白符将会忽略(这里补充下空白符的概念:空格、制表符、垂直制表符、回车符、换行符和进纸符)
回头看这个问题,当时应该是被绕晕了。 没有问题~ 在此回复一下