开始---《C++ primer》随笔

第一章


1.1 编写一个简单的C++程序

int main(){
    return 0;
}

编写完上面的代码后,通过编译就可以运行程序了。


1.2 初始输入输出

#include<iostream>      //标准输入输出库
using namespace std;    //标准库定义的所有名字都在命名空间std中
int main(){
    int n;              //定义变量n
    cin>>n;             //cin是标准输入
    cout<<n<<endl;      //cout是标准输出
    return 0;
}

也可以不用using namespace std,可以用std::cin和std::cout。如下。

#include<iostream>                      //标准输入输出库
int main(){
    int n;                              //定义变量n
    std::cin>>n;                        //cin是标准输入
    std::cout<<n<<std::endl;            //cout是标准输出
    return 0;
}

其中

  • 输出运算符(<<)
  • 输入运算符(>>)
  • 作用域运算符(::)
  • endl操作符

这一节还介绍了一个重要的知识点endl操作符效果是换行并且将与设备关联的缓存区中的内容刷到设备中


1.3 注释简介

//这是单行注释
/*
    这是多行注释
*/

注释在计算机里面起到重要作用,提高的程序的可读性


1.4 控制流

while语句 ,代码如下:

#include<iostream>
using namespace std;
/*
    输入一个整数试试。
*/
int main(){
    int n;
    cout<<"输入一个整数:"<<endl;
    cin>>n;
    while(n--){
        cout<<n<<" ";
    }
    cout<<endl;
}

for语句,代码如下:

#include<iostream>
using namespace std;
/*
    输入一个整数试试。
*/
int main(){
    int n;
    cout<<"输入一个整数:"<<endl;
    cin>>n;
    for(int i=0;i<n;i++){
        cout<<i<<" ";
    }
    cout<<endl;
}

if语句,代码如下:

#include<iostream>
using namespace std;
/*
    判断一个整数是否为偶数。
*/
int main(){
    int n;
    cout<<"输入一个整数:"<<endl;
    cin>>n;
    if(n%2==0){
        cout<<n<<"是偶数";
    }else{
        cout<<n<<"是偶数";
    }
    cout<<endl;
}

1.5 类简介

C++中,我们通过定义一个类(class)来定义自己的数据类型。
这里,我们讨论三个下列问题:

  • 类名是什么?
  • 它是在哪里定义的?
  • 它支持什么操作?

下列代码与书中代码略有偏差,不过大体一致。读者可以复制尝试。
在编辑器(如vc++ 6.0)下面创建一个控制台(Console)项目
首先,我们在头文件文件夹下创建一个 Sales_item.h 文件(本人推测这个类的内部结构)。

#include<iostream>
#include<string>
using namespace std;
class Sales_item
{
    public:
        Sales_item();                                                       //无参构造函数
        Sales_item(const Sales_item &item);                                 //拷贝构造函数
        ~Sales_item();                                                     //析构函数
        friend istream & operator>>(istream &is,Sales_item &item);          //重载输入运算符
        friend ostream & operator<<(ostream &os, Sales_item &item);         //重载输出运算符
        Sales_item & operator=(const Sales_item &item);                     //重载赋值运算符
        Sales_item & operator+(const Sales_item &item) const;               //重载加法运算符
        Sales_item & operator+=(const Sales_item &item);                    //重载复合赋值运算符
        const string & isbn() const;                                        //Sales_item的行为

    private:
        string isbn_no;                                                     //isbn编号
        int book_number;                                                    //图书数量
        float price;                                                        //图书价格
};

下列是对应的三个问题的答案

  • 从上面的模板可以看出Sales_item类名
  • 里面定义了它的成员函数数据成员
  • 成员函数提供对Sales_item的操作

接下来,我们在源文件里面创建一个 Sales_item.cpp 来实现Sales_item的细节

#include "Sales_item.h"
#include<iostream>
#include<string>
using namespace std;

//无参构造函数,初始化成员数据
Sales_item::Sales_item():isbn_no(" "), book_number(0), price(0){
    cout << "create Sales_item" << endl;
}

//拷贝构造函数
Sales_item::Sales_item(const Sales_item & item)
{
    this->isbn_no = item.isbn_no;                           //string类重载了赋值运算符(=)
    this->book_number = item.book_number;
    this->price = item.price;
}

//析构函数
Sales_item::~Sales_item(){
    cout << "free isbn no : " << this->isbn_no << endl;
}

//赋值运算符重载
Sales_item & Sales_item::operator=(const Sales_item & item)
{
    this->isbn_no = item.isbn_no;
    this->book_number = item.book_number;
    this->price = item.price;
    return *this;
}

//加法运算符重载
Sales_item & Sales_item::operator+(const Sales_item & item) const
{
    Sales_item *i = new Sales_item();                       //系统调用析构函数会销毁new出来的这个对象
    if (item.isbn_no == this->isbn_no) {                    //string类重载了(==)运算符
        i->isbn_no = item.isbn_no;
        i->book_number = item.book_number + this->book_number;
        i->price
            = (item.price*item.book_number+this->price*this->book_number)
                /(i->book_number);
    }
    else {
        cout << "different isbn no" << endl;        //isbn号不相同
    }
    return *i;
}

//复合运算符
Sales_item & Sales_item::operator+=(const Sales_item & item)
{
    if (this->isbn_no == item.isbn_no) {
        this->price
            = (item.price*item.book_number + this->price*this->book_number)
            / (item.book_number + this->book_number);
        this->book_number += item.book_number; 
    }
    else {
        cout << "different isbn no" << endl;
    }
    return *this;
}

//Sales_item的行为,它只返回isbn号
//加上后者的const是为了不让isbn_no被修改
//加上前者的const是为了不让返回的isbn_no修改
const string & Sales_item::isbn() const
{
    return this->isbn_no;
}

//输入运算符重载
istream & operator>>(istream & is, Sales_item & item)
{
    is >> item.isbn_no >> item.book_number >> item.price;
    return is;
}

//输出运算符重载
ostream & operator<<(ostream & os, Sales_item & item)
{
    os << item.isbn_no
        << " " << item.book_number
        << " " << item.price*item.book_number
        << " " << item.price;
    return os;
}

下面将进行读写Sales_item操作:

#include "Sales_item.h"
#include<iostream>
using namespace std;
int main()
{
    Sales_item book;
    cin >> book;
    cout << book << endl;
    getchar();
    getchar();
    return 0;
}

Sales_item对象加法操作:

#include "Sales_item.h"
#include<iostream>
using namespace std;
int main()
{
    Sales_item item1, item2;
    cin >> item1 >> item2;
    cout << item1 + item2 << endl;
    getchar();
    getchar();
    return 0;
}

到此,我们已经大致了解了什么是类。
接下来,我们讨论什么是成员函数?
如下代码:

#include "Sales_item.h"
#include<iostream>
using namespace std;
int main()
{
    Sales_item item1, item2;
    cin >> item1 >> item2;
    //检查item1和item2是否表示相同的书
    if (item1.isbn() == item2.isbn()) {      //isbn()就是Sales_item的成员函数
        cout << item1 + item2 << endl;
        getchar();
        getchar();
        return 0;       //表示成功
    }
    else {
        cerr << "Data must refer to same ISBN" << endl;
        getchar();
        getchar();
        return -1;      //表示失败
    }
}

从中,我们知道isbn()就是Sales_item的成员函数,它通过(类名.函数名)的形式而被调用,我们注意有一个”.”。(PS:成员函数一般也方法或者行为,它们三个是等价的。)


1.6 书店程序

书中程序的功能:总销售为total,当前交易为trans。通过程序可以算出,这一个进程结束之前的销售量(total)
可以自行代码尝试一下,挺好玩的一个程序。


小结

本节,对于本萌新来说收获颇大。主要讲解C++的一些基础语法

猜你喜欢

转载自blog.csdn.net/qq_37340753/article/details/80928889