C++复习 01 快速入门

来源:互联网 发布:小米手机网络短信 编辑:程序博客网 时间:2024/06/12 00:25



目 录

昨天的博客中提到将近期复习总结的笔记贴出来,即是对自己的一个激励,方便今后的回顾,同时也希望能借这些笔记能和有共同兴趣爱好的朋友交流交流.

从今天开始,大概有连续17篇,都是C++复习的一些内容,主要参考文献是Stanley B.Lippman先生所注的C++ Primer 4th[中文版].具体涉及其中很多代码,我就不再一一加注了.

关于文本内容及所有代码权力的声明:博客中引用许多书上的代码或者是其他网站/论坛贴出来的代码,本人只用作学习交流之用,决无商业意图.同时,我也严正声明,所有朋友,如果要转我的帖子,务必注明"作者:黑啤 来源:CSDN博客"和具体的网络地址http://blog.csdn.net/nx500/archive/2007/10/21/1835829.aspx,并且我的所有博客内容,禁止任何形式的商业用途,请大家尊重我的劳动.谢谢!

知识是属于全人类的,反对任何形式的商业垄断!

下面就是C++ Primer 4th[中文版]第一章总结出来的一点内容,都是基于我对C++的熟悉程度写下来的,一些我认为已经非常熟悉或者是后边章节会详细讲解的东西就没有写出来,可能未必符合所有同学的胃口.欢迎交流.

一.介绍快速入门.
  001 从键盘输入文件结束符.Windows系统下我们通过键入ctrl-z,Unix系统中使用ctrl-d.
  002 整篇都是一些基础内容介绍,根据书上提供的代码和在csdn上看到的Sales_item.h文件的部分内容,整理代码如下,分三个文件.

// 01002.cpp main函数文件.
        #include <iostream>
        #include 
"Sales_item.h"
        #include 
"Sales_item.cpp"
        
using std::cin;
        
using std::cout;
        
using std::endl;
        int main(void){
          // total表示输入相同书目的总和,trans表示待加入总和的一个新书目.
          Sales_item total, trans;
          int result = true;
          // 正确输入第一个值到total中,将后边的值依次加上去
          // 如果第一个值就错了,直接输出错误提示,并结束程序
          if(cin >> total){
            while(cin >> trans){
              // 如果输入的新书目与上一个书目信息一致,则将信息添加进去
              // 否则将原有的书目信息输出,并用新书目信息替换原总书目信息
              if(total.same_isbn(trans)){
                total += trans;
              }else{
                cout << total << endl;
                total = trans;
              }
            }
            // 结束输入后将最后的总书目信息输出
            cout << total << endl;
          }else{
            cout << "Input Data Error!" << endl;
            result = -1;
          }
          return result;
        }

// Sales_item.h文件.
        #ifndef SALESITEM_H
        
#define SALESITEM_H

        #include 
<iostream>
        #include 
<string>

        
class Sales_item {
          
// 定义数据成员和私有的成员函数
          private:
            std::
string isbn;    // ISBN存放在字符串中
            unsigned units_sold; // 书本的销售数量
            double revenue;      // 销售的总价格
          
// 定义成员函数
          public:
            
// 默认的构造函数,ISBN空,销售数量和价格为0
            Sales_item(): units_sold(0), revenue(0.0{ }
            
// 通过string的构造函数ISBN为指定的string,销售数量和价格为0
            
// 这个函数其实应该声明为explicit类型,防止意外的类型转换
            Sales_item(const std::string &book):
                isbn(book), units_sold(
0), revenue(0.0{ }
            
// 通过输入构造对象,需要重载operator>>
            Sales_item(std::istream &is{
              
is >> *this;
            }

            
// 判断两个对象是否完全相同
            friend bool operator==(const Sales_item&const Sales_item&);
            
// 将重载的输入输出操作符声明为友元,他们不能作为类的成员函数
            
// 因为左操作数必须为iostream对象,而不是这个类的对象
            friend std::istream& operator>>(std::istream&, Sales_item&);
            friend std::ostream
& operator<<(std::ostream&const Sales_item&);
            
// 重载+=,实现类对象相加
            Sales_item& operator+=(const Sales_item&);
            
// 计算平均价格
            double avg_price() const;
            
// 判断两个对象是否含有相同的ISBN
            bool same_isbn(const Sales_item &rhs) const {
              
return isbn == rhs.isbn;
            }

        }
;
        
#endif


// Sales_item.cpp文件.
        #include "Sales_item.h"
        #include 
<string>
        #include 
<iostream>
        
using std::string;
        
using std::cin;
        
using std::cout;
        
using std::endl;

        
// 算术操作,不作为内置的成员
        Sales_item operator+(const Sales_item&const Sales_item&);

        
// == 非成员函数,需要定义为友元
        inline bool operator==(const Sales_item &lhs, const Sales_item &rhs)...{
          
return lhs.units_sold == rhs.units_sold &&
              lhs.revenue 
== rhs.revenue &&
              lhs.same_isbn(rhs);
        }


        
// != 非成员函数,需要定义为友元
        inline bool operator!=(const Sales_item &lhs, const Sales_item &rhs)...{
          
return !(lhs == rhs);
        }


        
using std::istream;
        
using std::ostream;

        
// 复合赋值操作符
        inline Sales_item& Sales_item::operator+=(const Sales_item& rhs) ...{
          units_sold 
+= rhs.units_sold;
          revenue 
+= rhs.revenue;
          
return *this;
        }


        
// 相加,返回一个临时对象,非成员函数,需要定义为友元
        inline Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs) ...{
          Sales_item ret(lhs);  
// 使用左操作书通过默认的复制构造函数创建一个临时对象
          ret += rhs;           // 使用重载的+=操作符
          return ret;
        }


        
// 通过输入流给对象赋值
        inline istream& operator>>(istream& in, Sales_item& s)...{
          
double price;
          
in >> s.isbn >> s.units_sold >> price;
          
// 如果输入成功,则计算售价,否则返回一个空的对象
          if (in)
            s.revenue 
= s.units_sold * price;
          
else
            s 
= Sales_item();
          
return in;
        }


        
// 输出操作
        inline ostream& operator<<(ostream& outconst Sales_item& s)...{
          
out << s.isbn << " " << s.units_sold << " " << s.revenue << " " <<  s.avg_price();
          
return out;
        }


        
// 计算平均销售价格
        inline double Sales_item::avg_price() const...{
          
if (units_sold)
            
return revenue/units_sold;
          
else
            
return 0;
        }


// 编译及测试.粗体表示键盘输入,其他为计算机输出
heipi@Linux:~/Documents/CPP> g++ -o o 01002.cpp
heipi@Linux:
~/Documents/CPP> ./o
9-999-897-1 10 29.9
9-999-897-1 2  33
9-999-987-1 3 8

9-999-897-1     12      365     30.4167
^d
9-999-987-1      3       24      8
heipi@Linux:
~/Documents/CPP>
原创粉丝点击