C++ Primer Plus(第6版)读书笔记

第1章 预备知识

  • 程序=数据结构+算法
  • 面向过程语言采用自上向下方法设计程序,强调的是算法,编程的重点在于用算法解决问题
  • OOP采用自下向上的方法设计程序,强调的是数据,编程的重点放在概念表示上
  • 泛型编程强调的是独立于特定数据类型
  • OOP的概念赋予了C++将问题的多个概念联系起来的能力(高级概念抽象能力),C语言部分的功能赋予了C++充分利用硬件的能力(低级硬件访问能力)

C++11标准长达1350页,夸张……

Bjarne Stroustrup主页: https://www.stroustrup.com/

cin.get()读取输入,直到遇到Enter键结束,加入该语句可以避免出现程序运行后直接退出的情况。

cin.get();
return 0;

第2章 开始学习C++

C++标准的main函数最后如果没有return 0, 默认隐含有这条语句:仅适合于main函数。

#include <iostream>
using namespace std;
int main()
{
	cout << "按Enter键继续……"<<endl;
	cin.get();
}
  • 编译器将启动代码添加到程序中
  • main函数被启动代码调用
  • main以外的其他函数由main及其他函数调用
  • << 插入运算符,表示把内容传送给 cout, 指示了信息流动的路径, 是左移运算符 <<的重载
  • cout对象是用于输出内容的对象
  • endl 表示换行,是控制符,会立即刷新输出, \n虽然也可以换行,但不能保证立即刷新输出

c++builder默认的主函数是 int _tmain(int argc, _TCHAR* argv[]) , 实际上有一个隐藏的main函数来调用 _tmain函数

重载的例子:

  • &,地址运算符,AND 运算符
  • *,乘法,对指针解除引用
#include <iostream>
using namespace std;
int main()
{
    int carrots;
	cout << "你有几个carrots?" << endl;
	cin >> carrots;
	cin.get();
	cout << "我有" << carrots << "个carrots" << endl;
	carrots--;
	  cout << "我吃掉了一个carrot,还有" <<carrots<<"个"<< endl;
	cout << "按Enter键继续……" << endl;
	cin.get();
	return 0;
}

第3章 处理数据

整数

sizeof 函数:https://learn.microsoft.com/zh-cn/cpp/cpp/sizeof-operator?view=msvc-170

c++ Builder 下 short,int,long,long long 的数值范围 (int 和long相同),32位和64位结果是一样的:

#include <iostream>
#include <limits>
using namespace std;

int main()
{
    char i_char = CHAR_MAX;
    short i_short = SHRT_MAX;
	int i_int = INT_MAX;
	long i_long = LONG_MAX;
    long long i_llong = LLONG_MAX;

    cout << "char 类型:" << sizeof(i_char) << "字节," << sizeof(i_char) * 8
         << "位,最大值为" << int(i_char) << endl;

    cout << "short 类型:" << sizeof(i_short) << "字节," << sizeof(i_short) * 8
         << "位,最大值为" << i_short << endl;

    cout << "int 类型:" << sizeof(i_int) << "字节," << sizeof(i_int) * 8
         << "位,最大值为" << i_int << ",约为" << i_int / 100000000 << "亿"
		 << endl;

    cout << "long 类型:" << sizeof(i_long) << "字节," << sizeof(i_long) * 8
         << "位,最大值为" << i_long << ",约为" << i_long / 100000000 << "亿"
         << endl;

    cout << "long long类型:" << sizeof(i_llong) << "字节,"
         << sizeof(i_llong) * 8 << "位,最大值为" << i_llong << ",约为"
         << i_llong / 100000000 << "亿" << endl;

	cin.get();
	return 0;
}

运行结果:

char 类型:1字节,8位,最大值为127
short 类型:2字节,16位,最大值为32767
int 类型:4字节,32位,最大值为2147483647,约为21亿
long 类型:4字节,32位,最大值为2147483647,约为21亿
long long类型:8字节,64位,最大值为9223372036854775807,约为92233720368亿

整数字面值

  • 十进制数在cout中用dec输出
  • 0开头为8进制数,cout中用oct输出
  • 0x或0X开头为16进制数,cout中用 hex输出
#include <iostream>
using namespace std;

int main()
{
    int i = 0100;
    cout << "0100 8进制,10进制,16进制:" << oct << i << " " << dec << i << " "
         << hex << i << endl;
    //0100 8进制,10进制,16进制:100 64 40

    i = 0X40;
    cout << "0X40 8进制,10进制,16进制:" << oct << i << " " << dec << i << " "
         << hex << i << endl;
	//0X40 8进制,10进制,16进制:100 64 40

	cin.get();
	return 0;
}

cout区分输出: char 与 int

#include <iostream>
using namespace std;

int main()
{
    int i;
	char c;
    for (i = 0; i < 127; i++) {
        c = i;
		cout << i << ":" << c;
		if (i != 0 and i % 5 == 0) {
            cout << endl;
		} else {
            cout << "  ";
		}
    }

	cin.get();
	return 0;
}

输出:

0:   1:  2:  3:  4:  5:
6:  7:  8  9:    10:

  14:  15:13:
16:  17:  18:  19:  20:
21:  22:  23:  24:  25:
26:  27:  28:  29:  30:
31:  32:   33:!  34:"  35:#
36:$  37:%  38:&  39:'  40:(
41:)  42:*  43:+  44:,  45:-
46:.  47:/  48:0  49:1  50:2
51:3  52:4  53:5  54:6  55:7
56:8  57:9  58::  59:;  60:<
61:=  62:>  63:?  64:@  65:A
66:B  67:C  68:D  69:E  70:F
71:G  72:H  73:I  74:J  75:K
76:L  77:M  78:N  79:O  80:P
81:Q  82:R  83:S  84:T  85:U
86:V  87:W  88:X  89:Y  90:Z
91:[  92:\  93:]  94:^  95:_
96:`  97:a  98:b  99:c  100:d
101:e  102:f  103:g  104:h  105:i
106:j  107:k  108:l  109:m  110:n
111:o  112:p  113:q  114:r  115:s
116:t  117:u  118:v  119:w  120:x
121:y  122:z  123:{  124:|  125:}
126:~

page 68

正文完
 0
评论(没有评论)