系列文章目录
前言
考研复试要使用c++进行机试,希望借助csdn记录自己的学习c++ primer的历程。
一、知识摘要
1. 函数的定义:返回类型、名字、参数、主体
2. 类型:定义了元素内容+可以进行的运算
3. I/O:C++没有内置输入/输出;用标准库提供I/O机制。
iostream库:istream类型和ostream类型
cin:istream类型的标准(std)输入对象。
cout:ostream类型的标准(std)输出对象。
4. C++(C)一个表达式产生一个计算结果。
含有<<表达式的结果:<<左侧的运算对象,此结果可以用做另一个<<左侧的运算对象,并依次增加<<的个数。
5. 类:定义数据结构的工具,定义了一个新的类型,以及与之有关的操作,类的提供者定义类供其他人使用。
类的使用者不关心类如何实现,只关注类对象可以执行的操作。(封装)
成员函数:定义为类的一部分的函数,也叫方法。由类的对象调用成员函数,使用点运算符(.);成员函数调用表达式的计算结果是点运算符右侧的运算对象的成员。
二、练习
练习1.2 使main()函数返回-1而非一般的0,编译程序查看。
int main() {
return -1;
}
练习1.3 标准I/O练习,打印Hello,World。
#include<iostream>
//含cout
int main() {
std::cout << "Hello,World。" << std::endl;
//std标准,standard;
//::作用域说明
//<<std::endl说明左侧表达式的运算结果就是std::cout
//endl代表换行,同时刷新缓冲区
return 0;
}
练习1.4 *使用
#include<iostream>
int main() {
int a, b;
//变量必须先声明后使用,编译器需要使用为对应名字的变量分配存储空间以使用
std::cin >> a >> b;
//输入运算符同样返回其左侧运算对象作为其运算结果
std::cout <<a<<"*"<<b<<"="<< a * b<<std::endl;
return 0;
}
练习1.5 验证输入输出运算表达式的结果是其左侧运算对象
#include<iostream>
int main() {
int a, b;
std::cin >> a;
std::cin >> b;
std::cout << a;
std::cout << "*";
std::cout << b;
std::cout << "=";
std::cout << a * b;
std::cout << std::endl;
return 0;
}
练习1.9 使用while循环
#include<iostream>
int main() {
int i = 50;
int sum = 0;
while (i <= 100) {
sum += i;
++i;
}
std::cout << sum << std::endl;
return 0;
}
练习1.10 练习使用–运算符
#include<iostream>
int main() {
int i = 10, sum = 0;
while (i >= 0) {
sum += i;
--i;
}
std::cout << sum << std::endl;
return 0;
}
练习1.11 输入和循环语句
#include<iostream>
int main() {
int a, b;
std::cout << "输入两个整数(另第一个小于第二个):" << std::endl;
std::cin >> a >> b;
int i = a;
while (i <= b) {
std::cout << i<< std::endl;
++i;
}
}
练习1.13 for循环重做
(1.9)
#include<iostream>
int main() {
int sum = 0;
for (int i = 50; i <= 100; ++i) {
sum += i;
}
std::cout << sum << std::endl;
return 0;
}
(1.10)
#include<iostream>
int main() {
int sum = 0;
for (int i = 10; i >= 0; --i) {
sum += i;
}
std::cout << sum;
return 0;
}
(1.11)
#include<iostream>
int main() {
int a, b;
std::cin >> a >> b;
for (int i = a; i <= b; ++i) {
std::cout << i << std::endl;
}
return 0;
}
练习1.16 键盘输入文件结束符,结束输入
#include<iostream>
int main() {
int i, sum = 0;
std::cout << "输入一组数:" << std::endl;
while (std::cin >> i) {
sum += i;
}
std::cout << "这些数的和是" << sum << std::endl;
return 0;
}
练习1.19 练习使用if
#include<iostream>
int main() {
int a, b;
std::cin >> a >> b;
if (a < b) {
int i = a;
while (i <= b) {
std::cout << i << std::endl;
++i;
}
}
else {
std::cout << "输入的第一个数不比第二个小";
}
return 0;
}
Sales_item头文件
#ifndef SALESITEM_H
#define SALESITEM_H
#include "Version_test.h"
#include <iostream>
#include <string>
class Sales_item {
friend std::istream& operator>>(std::istream&, Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
friend bool operator<(const Sales_item&, const Sales_item&);
friend bool
operator==(const Sales_item&, const Sales_item&);
public:
#if defined(IN_CLASS_INITS) && defined(DEFAULT_FCNS)
Sales_item() = default;
#else
Sales_item() : units_sold(0), revenue(0.0) { }
#endif
Sales_item(const std::string& book) :
bookNo(book), units_sold(0), revenue(0.0) { }
Sales_item(std::istream& is) { is >> *this; }
public:
Sales_item& operator+=(const Sales_item&);
std::string isbn() const { return bookNo; }
double avg_price() const;
private:
#ifdef IN_CLASS_INITS
unsigned units_sold = 0;
double revenue = 0.0;
#else
unsigned units_sold;
double revenue;
#endif
};
inline
bool compareIsbn(const Sales_item& lhs, const Sales_item& rhs)
{
return lhs.isbn() == rhs.isbn();
}
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.isbn() == rhs.isbn();
}
inline bool
operator!=(const Sales_item& lhs, const Sales_item& rhs)
{
return !(lhs == rhs);
}
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
Sales_item
operator+(const Sales_item& lhs, const Sales_item& rhs)
{
Sales_item ret(lhs);
ret += rhs;
return ret;
}
std::istream&
operator>>(std::istream& in, Sales_item& s)
{
double price;
in >> s.bookNo >> s.units_sold >> price;
if (in)
s.revenue = s.units_sold * price;
else
s = Sales_item();
return in;
}
std::ostream&
operator<<(std::ostream& out, const Sales_item& s)
{
out << s.isbn() << " " << s.units_sold << " "
<< s.revenue << " " << s.avg_price();
return out;
}
double Sales_item::avg_price() const
{
if (units_sold)
return revenue / units_sold;
else
return 0;
}
#endif
Version_test.h
#ifndef VERSION_TEST_H
#define VERSION_TEST_H
#if _MSC_FULL_VER == 170050522 || _MSC_FULL_VER == 170050727
#endif
#ifndef LROUND
inline long lround(double d)
{
return (d >= 0) ? long(d + 0.5) : long(d - 0.5);
}
#endif
#endif
1.20 利用上述两个头文件,使用Sales_item类,读取一组数据并输出
#include<iostream>
#include"Sales_item.h"
int main() {
Sales_item book;
std::cout << "输入书本的ISBN、出售量、售价" << std::endl;
while (std::cin >> book) {
std::cout << book << std::endl;
std::cout << "输入书本的ISBN、出售量、售价" << std::endl;
}
std::cout << "结束";
return 0;
}
1.21 利用上述两个头文件,输出两个Sales_item类的和。
#include<iostream>
#include"Sales_item.h"
int main() {
Sales_item book1, book2;
std::cout << "输入两个ISBN号相同的Sales_item对象,ISBN、销售量、单价";
std::cin >> book1 >> book2;
Sales_item book = book1 + book2;
std::cout << "总共是" << std::endl;
std::cout << book;
}
1.22 多组输入
#include<iostream>
#include"Sales_item.h"
int main() {
Sales_item book_i, book_sum;
std::cout << "输入一组ISBN相同的Sales_item类的book数据:ISBN、售量、单价" << std::endl;
while (std::cin >> book_i) {
book_sum += book_i;
}
std::cout << "结果是" << std::endl;
std::cout << book_sum << std::endl;
}
1.23 多组输入,统计每个ISBN的销售
#include<iostream>
#include"Sales_item.h"
int main() {
Sales_item book1,book2;
std::cout << "输入第一本书的ISBN、销售量、单价" << std::endl;
std::cin >> book1;
std::cout << "输入第二本书的ISBN、销售量、单价" << std::endl;
while (std::cin >> book2) {
if (book1.isbn() == book2.isbn()) {
book1 += book2;
continue;
}
else {
std::cout << "ISBN为" << book1.isbn() << "的书的销售情况" << book1 << std::endl;
book1 = book2;
std::cout << "继续输入" << std::endl;
continue;
}
}
return 0;
}
总结
本书第一章简单的介绍了C++程序的一般格式,介绍了诸如类型、表达式、类、成员函数等内容。