开始
1.1 编写一个简单的c++程序
int main()
{
return 0;
}
上面是一个简单的main函数,这个函数定义包含四个部分:返回类型(int)、函数名(main)、形参列表((),允许为空)、函数体({return 0;})
1.1.1 编译、运行程序
1.2 初始输入输出
iostream库包含了两个基础类型:输入流 istream 、输出流ostream。
标准输入输出对象:输入cin 、输出cout、cerr输出警告和错误信息、clog输出程序运行时的一般性信息。
使用IO库求和的程序
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;
return 0;
}
1.3 注释
单行注释以双斜线(//) 开始,以换行符结束
多行注释以(/)开始,以(/)结束
#include <iostream>
/*
* 这是多行注释
*
*/
int main()
{
// 这是单行注释
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;
return 0;
}
1.4 控制流
1.4.1 while语句
while语句会不断执行一段代码,直到给定条件为假为止。
#include <iostream>
int main()
{
int sum = 0, val = 1;
while (val <= 10) {
sum += val;
++val;
}
std::cout << "sum of 1 to 10 inclusive is "
<< sum << std::endl;
return 0;
}
1.4.2 for 语句
while循环中检测变量、在循环体中递增变量的模式使用非常频繁,以至于c++专门定义了第二种循环语句—for循环语句。
#include <iostream>
int main()
{
int sum = 0;
for (int val = 1; val <= 10; ++val)
{
sum += val;
}
std::cout << "sum of 1 to 10 inclusive is"
<< sum << std::endl;
return 0;
}
1.4.3 读取数量不定的输入数据
#include <iostream>
int main()
{
int sum = 0, value = 0;
while (std::cin >> value) {
sum += value;
std::cout << "sum is:" << sum << std::endl;
}
return 0;
}
1.4.4 if语句
#include <iostream>
int main()
{
// currVal 正在统计的数 ; 新值存入val
int currVal = 0, val = 0;
if (std::cin >> currVal) {
int cnt = 1; // 当前值的个数
while (std::cin >> val) { // 读取剩余的数
if (val == currVal) {
++cnt;
}
else {
std::cout << currVal << " occurs"
<< cnt << " times" << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " occurs"
<< cnt << " times" << std::endl;
}
return 0;
}
1.5 类
1.5.1 Sales_item类
Sales_item类的作用是表示一本书的总销售额、出售册数和平均售价。
#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>
class Sales_item {
public:
Sales_item(const std::string& book) :isbn(book), units_sold(0), revenue(0.0) {}
Sales_item(std::istream& is) { is >> *this; }
friend std::istream& operator>>(std::istream&, Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
public:
Sales_item& operator+=(const Sales_item&);
public:
double avg_price() const;
std::string getIsbn()const {
return isbn;
}
bool same_isbn(const Sales_item& rhs)const {
return isbn == rhs.isbn;
}
Sales_item() :units_sold(0), revenue(0.0) {}
public:
std::string isbn;
unsigned units_sold;
double revenue;
};
using std::istream;
using std::ostream;
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);
}
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& out, const Sales_item& s) {
out << s.isbn << "\t" << s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
return out;
}
inline double Sales_item::avg_price() const {
if (units_sold)
return revenue / units_sold;
else
return 0;
}
#endif
读写Sales_item
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book;
std::cin >> book;
std::cout << book << std::endl;
return 0;
}
Sales_item对象的加法
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1, item2;
std::cin >> item1 >> item2;
std::cout << item1 + item2 << std::endl;
return 0;
}
1.5.2 初始成员函数
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1, item2;
std::cin >> item1 >> item2;
if (item1.getIsbn() == item2.getIsbn()) {
std::cout << item1 + item2 << std::endl;
return 0;
}
else {
std::cerr << "Data must refer to same ISBN"
<< std::endl;
return -1;
}
}
getIsbn() 就是一个成员函数
1.6 书店程序
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item total;
if (std::cin >> total) {
Sales_item trans;
while (std::cin >> trans) {
if (total.getisbn() == trans.getisbn()) {
total += trans;
}
else {
std::cout << total << std::endl;
total = trans;
}
}
std::cout << total << std::endl;
}
else {
std::cerr << "No data?!" << std::endl;
return -1;
}
return 0;
}