第一章
1.1 编写一个简单的C++程序
int main(){return 0;
}
编写完上面的代码后,通过编译就可以运行程序了。
1.2 初始输入输出
#include<iostream> //标准输入输出库
using namespace std; //标准库定义的所有名字都在命名空间std中
int main(){int n; //定义变量ncin>>n; //cin是标准输入cout<<n<<endl; //cout是标准输出return 0;
}
也可以不用using namespace std,可以用std::cin和std::cout。如下。
#include<iostream> //标准输入输出库
int main(){int n; //定义变量nstd::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++的一些基础语法。