前言
Rock老师;C++;笔记
一、命名空间
C++避免名字冲突:使用命名空间
1.用法1:指定整个域名
#include <iostream>
#include <string>
namespace China {
float population = 14.1; //单位: 亿
std::string capital = "北京";
}
namespace Japan {
float population = 1.27; //单位: 亿
std::string capital = "东京";
}
using namespace Japan;
int main(void) {
//使用默认命名空间
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << population << std::endl;
//使用指定命名空间
std::cout << "首都:" << China::capital << std::endl;
std::cout << "人口:" << China::population << std::endl;
system("pause");
return 0;
}
/*
在VS2010运行结果:
首都:东京
人口:1.27
首都:北京
人口:14.1
*/
2.用法2:直接指定命名空间中的标识符
#include <iostream>
#include <string>
namespace China {
float population = 14.1; //单位: 亿
std::string capital = "北京";
}
namespace Japan {
float population = 1.27; //单位: 亿
std::string capital = "东京";
}
//注意:没有namespace
//直接指定命名空间中的标识符,而不是整个域名
using China::capital;
using Japan::population;
int main(void) {
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << population << std::endl;
system("pause");
return 0;
}
/*
在VS2010运行结果:
首都:北京
人口:1.27
*/
二、C++软件(exe)生成流程
源程序(hello.cpp)
--第一次处理(预处理)->(头文件内容拷贝到源代码等)源程序(a.cpp)
--第二次处理(编译) ->汇编程序(a.s)
--第三次处理(汇编) ->二进制程序(a.o)
--第四次处理(链接) ->(C++库文件链接)可执行文件(a.exe)
//与操作系统-内存管理 联系(编译-链接-装入)
三、注释
1.使用注释的要点
1注释的目的:
为了让程序更方便阅读(“可读”),以便于维护。
需要注释的内容:
- 重要变量名的作用(用来表示什么)
- 比较复杂的算法思想
- 程序中的关键步骤
2.注释的方式
有两种注释方式
- 单行注释 //
在行尾,或代码的上一行(和代码一同空一行)
在代码的下一行也可以,但很少有人这么做。 - 多行注释 /* */
不支持嵌套。 - 不要为了注释而注释.
过多的注释,反而有害。
2.注释的风格
- 在行尾注释 使用 //注释
- 在代码的上一行使用 //注释
- 多方内容的注释,使用 /* */
- 函数的注释
四、数据类型
int unsigned int
char unsigned char
long long long unsinged long
short unsigned short
float double
各种指针类型 bool
string 类
// C++完全支持C语言各种数据类型
1.不同数据类型的区别
- 表示意义不同
- *占用内存不同
- *表示的范围不同
- 使用方法不同
五、变量
变量是处理数据的基本实体;
程序运行时, 大量数据存储在变量中 计算/交换;
1.变量是什么
变量是内存中的一块存储空间, 即一小块内存
2.变量和数据类型的关系
变量是一个盒子, 盒子里保存了**数据**
数据分成很多**类型** // 数据类型
- 变量的类型,就是变量中数据的类型
- 变量在定义(创建)时, 必须指定它的类型
// 相当于制作一个盒子, 要确认盒子装什么, 来制作不同大小的盒子 - 一个变量只有一个类型, 并且不能改为其他类型
3.变量的定义
Eg : int i;
1.变量名 : i
2.变量类型 : int
3.占用内存 : 4字节(Byte) // 1Byte = 8bit (八个二进制位)
1.定义形式
- 定义时, 不初始化, 垃圾值
int i;
int j;
- 不推荐, 不方便注释
int i, j;
- 定义时, 赋初值, 好习惯
int i = 0;
2.最底层
内存的存储单位 : 字节(Byte)
int i = 100;
// 内存是竖着的连续格子, 一个格子1Byte, 可存储 8bit
/*
小端格式(大多数) : 小 -> 大
内存 内存地址
空 //8005
空 //8004
0000 0000 //8003
0000 0000 //8002
0000 0000 //8001
0110 0100 //8000
*/
4.变量的命名规范
- 数字; 字母; 下划线
- 不能以数字开头
- 不能与关键字同名
1.最大长度 : 取决于编译器 32 以上 //超长会警告
2.顾名思义 // 最怕看代码
3.不要使用汉语拼音 ; 尤其是简写
命名风格 : 风格统一
(1) 下划线风格
int student_age; // 一般用于变量名, 函数名
(2) 小驼峰风格
int studentAge; // 一般用于变量名, 函数名
(3) 大驼峰风格
class StudentAge; // 一般用于“类名”
(4)全部大写
#define MAX_AGE 30 // 一般用于宏 ; 预处理直接替换
(5)匈牙利命名法
臃肿
5.变量类型
1.整数类型_int
2.字符类型_char
3.浮点类型_float/double
4.布尔类型_bool
5.无符号类型_unsigned
1. unsigned 等价于 unsigned int // 2^32
2. 无符号数,不能表示负数
3. 如果强行用无符号数表示负数,实际存储的是这个负数对应的“补码” // 即:该负数 + “模值”
6.C++ 输入/输出
- 键盘 -回车> 输入缓冲区 -cin> 变量
// 输入缓冲区, 有东西直接读, 没东西则等待
7.两种常量
1.字面常量 与 进制常量
1. int : 1, 2, ... // 默认
2. long : 1L, 2L, ...
3. long long : 1LL, 2LL, ...
4. char : 'a', 'b', ... //单引号
5. float : 1.0f
6. double : 1.0 //默认
7. 十六进制 : 0x11 = 1*16 + 1*1 = 17 // 每一位有16种可能
8. 八进制 : 011 = 1*8 +1*1 = 9 // linux表示系统权限时使用
2.字面常量缺点
1. 程序可读性变差
2. 代码可维护性变差
3.符号常量(推荐使用)
(1)#define 宏定义的符号常量
# define MAX_AGE 25 // 在编译的预处理阶段,直接把MAX_AGE替换为35
(2)const修饰的符号常量
const int max_age = 25;
max_age = 30; //错误!编译失败
/*
注 :const修饰的符号常量,又叫“只读变量”。
本质上,是一个变量,只是被const限制。
*/
8.数据类型转换
六、字符串
1.字符串长度
字符串中包含字符(字节)的个数, 汉字所占字节为 2或3
2.字符串常量
1. 用 " " 括起来
2. 输出 :
printf("name = %s", "sugar");
cout << "suagr";
3.字符串结束符
C语言 : '\0'
C++ : string类_长度
4.字符串变量
C语言 : char类型数组
C++ : std :: string 类型
5.字符串的定义和初始化
初始化 : 定义变量的同时, 设置一个值, 称为初始化
// string 的定义与初始化
# include <iostream>
# include <string>
# include <Windows.h>
using namespace std;
int main(void)
{
string king1; // 空字符串
cout << "king1 = " << king1 << endl; // 输出为空
king1 = "sugar"; // 字符串常量拷贝到变量中
cout << "king1 = " << king1 << endl;
string king2;
king2 = king1; //字符串变量拷贝到变量中
cout << "king2 = " << king2 << endl;
// 初始化 : 定义变量的同时设置一个值
string king3("sugario"); // 定义了一个字符串变量king3, 同时把它的值设置为"sugario"
cout << "king3 = " << king3 << endl;
string king4(king3); // 用字符串变量完成初始化
cout << "king4 = " << king4 << endl;
string king5(5, 'S'); // 等效于 : sting king5("SSSSS");
cout << "king5 = " << king5 << endl;
system("pause");
return 0;
}
/*
king1 =
king1 = sugar
king2 = sugar
king3 = sugario
king4 = sugario
king5 = SSSSS
*/
6.字符串的输入与输出
使用 std :: cin >> 输入
从第一个非空白字开始,直到遇到空白字符时停止输入 // 空白字符是指:空格,制表符,回车符
使用std::cout << 输出
# include <iostream>
# include <Windows.h>
# include <string>
using namespace std;
int main(void)
{
string job;
// 基本用法
cout << "你的工作是?" << endl; // console output
cin >> job ; // console input
/*
你的工作是?
cpp c // 遇到空白字符时停止输入
做cpp, 感觉怎么样?
*/
cout << "做" << job << ", 感觉怎么样?" << endl;
string profession1;
string profession2;
// 利用自动跳过空白字符
cout << "你的两个专业是?" << endl;
cin >> profession1 >> profession2;
/*
你的两个专业是?
考古 土木 金融
考古和土木专业不错哦
*/
cout << profession1 << "和" << profession2 << "专业不错哦" << endl;
system("pause");
return 0;
}
// 连续输入多个字符串, 且字符串个数不确定
// 直到输入结束时(ctrl + z 并 回车),
# include <iostream>
# include <windows.h>
# include <string>
using namespace std;
int main(void)
{
string food;
int count = 0;
cout << "你喜欢吃什么(输入 ctrl + z 退出) : " ;
// 使用cin >> 输入时, 遇到文件结束符(ctrl + z), 就返回0
while(cin >> food)
{
count += 1;
cout << "你最喜欢的第" << count <<"个美食是 : " << food << endl;
cout << "你还喜欢吃什么 : ";
}
cout << "你最喜欢吃的美食一共有" << count << "种" << endl;
system("pause");
return 0;
}
/*
你喜欢吃什么?面板 肉包 牛肉 鸡胸肉
你最喜欢的第1个美食是 : 面板
你最喜欢的第2个美食是 : 肉包
你最喜欢的第3个美食是 : 牛肉
你最喜欢的第4个美食是 : 鸡胸肉
^Z
你最喜欢吃的美食一共有4种
*/
7.字符串的比较
比较规则:和C语言相同。
从字符串的第一个字符开始,对应字符逐个比较,直到遇到不相等的字符为止。
// c++ 可直接使用 >, <, == ...
8.字符串的加法_拼接
七、数组
八、运算符
1.逻辑运算
2.位运算
总结
23/05/02 - 未完结