【C++ Primer 边学边写系列】第1章 开始

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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值