概述
第1周:C++基础入门(第1章至第3章)
作业:
编写一个实验楼课程管理程序,程序具备下述功能:
程序运行后可以循环输入操作命令
操作命令输入0,打印出程序帮助信息,即每个操作命令的作用
操作命令输入1,打印出程序中存储的所有课程ID和课程名
输入2,打印出课程数量
输入3,打印出名字最长的课程信息,如果有多个相同长度的课程名请都打印出
输入4,删除最后一个课程,如果没有课程需要返回错误信息
输入5,退出程序
chapter 1
1. 函数的定义: return type, function name, parameter list, function body
// int为返回类型,main为函数名,小括号包围的是可以为空的形参列表
int main()
{
// 大括号包围的是函数体
return 0;
// 返回值
}
2. c++程序必须包含一个main函数
3. 源文件命名约定: .cc、.cxx、.cpp、.cp、.c
4. 标准输入输出 iostream: cin, cout, cerr, clog
5. 循环控制语句
// while循环
while (condition) {
statement
}
// 新式for循环
for (init statement; condition; expression) {
statement
}
6. 从键盘输入文件结束符: unix为Ctrl + D,windows为Ctrl + Z
7. 条件控制语句
// if 条件语句
if (condition) {
statement
} else if (condition) {
statement
} else {
statement
}
8. 类:
- 一种用于定义自己的数据结构及其相关操作的机制。
- 每个类都定义了一个新的类型,类型名就是类名。
- 类一般定义在头文件中(.h, .hpp, .hxx)。
- 类的作者定义了类对象可以执行的所有动作。
11. 成员函数是定义为类的一部分的函数(方法)
12. 点运算符 '.' 只能用于类类型的对象:
- 左侧运算对象必须是一个类类型的对象,
- 右侧运算对象必须是该类型的一个成员名,
- 运算结果为右侧运算对象指定的成员。
- 调用运算符'()':括号中为实参列表
- e.g. item.isbn()
// 类类型对象.成员函数(可为空的实参列表)
13. 文件重定向:
- < : 输入重定向
- > : 覆盖输出重定向
- >> : 追加输出重定向
###遇到的问题:
####1. 练习1.23 如果不用map的话只能在输入顺序上要求相同 ISBN的都放一起才能统计准确,所以先使用map完成了
#include <iostream>
#include <map>
#include "Sales_item.h"
using namespace std;
int main()
{
map<string, size_t> stat;
Sales_item item;
while (cin >> item) {
string isbn = item.isbn();
if (stat.find(isbn) == stat.end()) {
stat[isbn] = 0;
}
stat[isbn]++;
}
map<string, size_t>::iterator it;
for (it = stat.begin(); it != stat.end(); it++) {
cout << "ISBN: " << it->first << " " << it->second << endl;
}
return 0;
}
####2. 在编译书里的源代码的时候发现提示了类的声明里不能对变量进行初始化操作:
![make failed](https://dn-simplecloud.qbox.me/uid/undefined/1441177221129.png)
g++ -v看到的版本是4.4.7,尝试着升级gcc到4.5+,整了一个晚上没升级成功,各种依赖的库都缺少。
早上到公司请教了一下同事,说是gcc还依赖于系统的内核版本,没办法只能装了一个centos7的系统。
装完系统之后看到gcc是4.8.3的,重新wget了源码编译了一下就编译成功了。
不过自己写了个例子include了Sales_item.h,编译的时候还是有warning( ** 去掉该警告@chapter2-22 ** ),不过总算可以暂时忽略了:
![编译警告](https://dn-simplecloud.qbox.me/uid/undefined/1441178482760.png)
chapter 2
1. 基本内置类型:算数类型、空类型
2. 算数类型:整型、浮点型
3. short、int、long、long long的区别:存放数据时所占用的内存大小不一样,sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
4. signed和unsigned的区别:signed可以表示正负数或0,unsigned只能表示非负数
5. float和double的区别:float的精度小于double
6. 类型转换可能会导致的问题:溢出、数据截断
7. 避免无法预知以及依赖于实现环境的行为
8. 不要混用signed和unsigned的类型
9. signed 转 unsigned超出范围时会进行取模赋值,如将 -1 赋值给unsigned char类型的变量,则最后的赋值结果是:-1 % 2^sizeof(unsigned char)
10. 字符串默认最后有一个结束符 '