标题:C++学习笔记,已结束
只看楼主
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
得分:0 
以下是引用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时,空白符将会忽略(这里补充下空白符的概念:空格、制表符、垂直制表符、回车符、换行符和进纸符)
        

回头看这个问题,当时应该是被绕晕了。  没有问题~  在此回复一下
2011-10-13 00:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-340790-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090014 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved