IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++primer第一章 开始 -> 正文阅读

[C++知识库]c++primer第一章 开始

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;
}

向流写入数据

输出运算符(<<)接受两个运算对象,左侧:ostream对象,右侧:要打印的值

std::cout << "Enter two numbers:" << std::endl;
//等价于(std::cout << "Enter two numbers:" )<< std::endl;

第一个输出运算符给用户打印一条信息
第二个运算符打印endl:操纵符的特殊值,效果是结束当前行

使用标准库中的名字

使用std::cout,std::endl,未直接使用cout,endl

前缀std::指出名字cout,endl是定义在名为std的命名空间(namespace)

标准库定义的所有名字都在命名空间std中

使用**作用域运算符(::)**来稚楚我们向使用定义在命名空间std中的名字cout

从流读取数据

int v1=0,v2=0;

初始化一个变量,在变量创建的同时为它赋予一个值

std::cin >> v1 >> v2;
//读入两个值,第一个存入v1,第二个存入v2;
/*等价于:
std::cin >> v1;
std::cin >> v2;
*/

输入运算符(>>):接受两个对象,左侧:iostream,接受一个对象作右侧运算对象。它从iostream读入数据,并存入给定对象。

完成程序

打印计算结果:

std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 <<std::endl;

1.3 注释简介

//注释

或者

/*

注释

*/

1.4控制流

1.4.1 while语句

while语句反复执行一段代码,直至给定条件为假为止。

#include<iostream>
int main()
{
   int sum(0), val(1);
   while (val <= 10) {
   	sum += val;//等价:sum=sum+val;
   	++val; //等价:val=val+1;
   }
   std::cout << "Sum of 1 to 10 insclusive is " << sum << std::endl;
   return 0;
}

1.4.2 for语句

#include<iostream>
int main()
{
	int sum(0);
	for(int val = 1;val <= 10;++val) {
		sum += val;
	}
	std::cout << "Sum of 1 to 10 insclusive is " << sum << std::endl;
	return 0;
}

for循环总体流程:

  1. 创建变量val,初始化。
  2. 检测val是否小于等于10。成功:执行for循环;失败:退出循环。
  3. val增加1。
  4. 重复2。

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;
}

std::cin >> value

此表达式从标准输入读取下一个数,保存在value中。当遇到文件结束符或者无效输入时(读入不是整数),条件就会变成假

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;     //将cnt加1
			else            //否则,打印前一个值的个数
			{
				std::cout << currVal << " occurs " << cnt << " times " << std::endl;
				currVal = val;  //记住新值
				cnt = 1;     //重置计数器
			}
		}//while循环在这里结束
		//记住打印文件中最后一个值的个数
		std::cout << currVal << " occurs " << cnt << "times " << std::endl;
	}//最外层的if语句在这里结束
	return 0;
}

最后一个值个数打印不出来!!!!!

1.5 类简介

定义一个(class)来定义自己的数据结构

通常使用.h作为头文件的后缀

1.5.1 Sales_item类

每个类都定义了一个新的类型,其类型名就是类名

eg sale_item定义了一个名为sale_item的类型

Sales_item item;

上述表达item是Sales_item类型的对象,简单说成“一个Sales_item对象”

除了定义Sales_item类型的变量,还可以:调用函数,输入输出>>/<<,赋值,加法等。

读写Sales_item

eg:从标准输入读入数据,存入一个Sales_item对象中,然后讲Sales_item的内容写回到标准输出

#include<iostream>
#include"Sales_item.h"
int main()
{
	Sales_item book;
	//读入ISBN号,售出的册数以及销售价格
	std::cin >> book;
	//写入ISBN,售出的册数,总销售额和平均价格
	std::cout << book << std::endl;
	return 0;
}

来自标准库的头文件使用< >,不来自使用“ ”

Sales_item对象的加法

eg:将两个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;
}

区别:

对于int,计算传统意义上的和,两个数值的算数加法结果;对于sales_item对象,用的是新的“和”概念,两个sales_item对象的成员对应相加的结果

使用文件重定向

$ addItems <intfile>outfile

假定$是操作系统提示符,上述命令会从一个名为infile的文件读取销售记录,并将输出结果写入到一个名为outfile的文件中,两个文件都位于当前目录中。

头文件Sales_item.h

#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;
	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

1.5.2 初始成员函数

将两个Sales_item对象相加的程序首先应该检查两个对象是否具有相同的ISBN。方法如下:

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

什么是成员函数

if语句的检测条件:

item1.isbn() == item2.isbn()

调用名为isbn的成员函数。成员函数是定义类的一部分的函数,有时也被称为方法

通常以一个类对象的名义来调用成员函数。eg:

item1.isbn()

使用点运算符(.)来表达我们需要“名为item1的对象的isbn成员”。点运算符只能用于类类型的对象。.左侧运算对象必须是一个类类型的对象右侧运算对象是该类型的一个成员名运算结果为右侧运算对象指定的成员

调用运算符 :()调用函数,()里面放置实参列表(可能为空)

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.isbn() == trans.isbn())
				total += trans; //更新总销售额
			else{
				//打印前一本书的结果
				std::cout << total << std::endl;
				total = trans; //total现在表示下一本书的销售额
			}
		}
		std::cout << total << std::endl;
	}
	else {
		//没有输入!警告读者
		std::cerr << "No data?!" << std::endl;
		return -1;
	}
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:29:00  更:2021-09-22 14:30:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:34:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码