C++学习第一天
用来记录菜鸟的学习过程
编译环境:linux下g++
1 初窥输入、输出
1.1 标准输入与输出对象
cin cout cerr clog (可以和C中的标准输入输出对比一下)
默认情况下,读cin会刷新cout;当程序正常结束时,cout也会被刷新。
先熟悉一下程序模型:
#include<iostream>
int main()
{
std::cout<<"enter two numbers:"<<std::endl;
int v1,v2;
std::cin>>v1>>v2;
std::cout<<"the sum of "<<v1<<" and "<<v2<<" is "<<v1+v2<<std::endl;
return 0;
}
输入、输出格式明显和c不同,值得注意的是输出部分,endl是个操纵符,将他写入输出流时具有输出换行的效果,并且刷新与设备相关联的缓冲区(buffer)。通过刷新缓冲区用户可以立即看到输入到流中的输出。
2 注释
单行注释://
多行注释:/* */
3 构造函数:每个类都可能会定义一个或几个特殊的成员函数来告诉我们如何初始化类类型的变量,定义如何进行初始化的成员函数就叫构造函数。
每个构造函数必须能个接受不同数目或者不同类型的参数。
4 变量的直接初始化和复制初始化区别
直接初始化:int i(2);
复制初始化:int i=2;
可以混合使用:比如:double salary = 999.99,wage(salary + 0.01);
5 变量初始化规则
5.1 内置类型变量的初始化
内置类型变量是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的变量不进行自动初始化。
建议:每个内置类型变量都要进行初始化,为了程序的安全性。
5.2 类类型变量的初始化
一般每个类都已几个成员函数即构造函数来初始化类变量,如果没有构造函数,有默认的特殊的构造函数:默认构造函数。
在C++中变量必须且仅能定义一次,而且在使用变量之前必须声明或定义变量。
6 名字的作用域
全局作用域、局部作用域、语句作用域
在一个函数体内的局部变量如果和全局变量同名时,在使用中可以屏蔽全局变量
7 通常把一个变量定义在它首次使用的地方是个比较好的建议。提高代码的可读性
8 const限定符
把一个对象转换成常量。例如:const int bufsize = 512;
定义了bufsize是一个常量,在任何地方它的值都是不可改变的。
常量定义后不能再修改,所以定义时必须进行初始化
9 引用:就是对象的另一个名字。引用是一种复合类型,通过在变量名前加“&”来定义。
当引用初始化后,只要该引用存在,他就保持绑定在初始化时指向的对象,不可能将引用绑定到另外一个对象。
引用就是对象的另一个别名,都是同一个人。就好比人的大名和小名。对任何一个名字的操作都是一样的。
可以定义多个别名。定义别名时需要注意要保持类型的一致性。
10 typedef名字 用来定义类型的同义词:typedef int exam_score
exam_score test_result; <==> int test_result;
11 枚举
12 类类型
13 设计自己的头文件
头文件为相关声明提供了一个集中放置的位置,头文件中一般包含类的定义、extern变量的声明和函数的声明。
****************************************************************************
****************************************************************************
第三章:标准库类型
主要讲述:命名空间的using声明、标准库string类型、标准库vector类型、迭代器、标准库bitset类型
1。命名空间的using声明
形式: using namespace::name
一旦使用了using声明,我们就可以直接引用名字了,而不需要再加引用该名字的命名空间。
2. 标准库string类型
string类型支持长度可变的字符串,
2.1 string对象的读写
测试程序代码:
编译后运行:
注意:a 读取我们输入的字符串时,忽略了开头所有的空白字符(如空格,换行符,制表符)
b 读取字符直到再次遇到空白字符,读取终止。我们输入的是:“ love you ”前后都有空格,但是当输出时只显示love,明显前面的空格忽略了,再次遇到空格时读终止了。
2.2 读入未知数目的string对象
小程序:
输出结果为:
我们发现上次总结的两点再此体现了,并且这个while循环一直有效,等着你输入。。。。。。
2.3 用getline读 取正行文本
1 #include<iostream>
2 #include<string>
3 using namespace std;
4 int main()
5 {
6 string line;
7 cout<<"请输入字符:";
8 while(getline(cin,line))
9 cout<<"字符数出:"<<line<<endl;
10 // cout<<"请输入字符:";
11 return 0;
12 }
编译运行:
注解:由于getline函数返回时将会丢弃换行符,换行符将不会存在string对象中
2.4 string对象的操作
对size()的验证
编译运行结果:
注意:换行符“\n”在size统计时占一个字符。
2.5 string对象的赋值
2.6 string中对字符的操作
3 标准库vetcor类型
3.1 vector对象的定义和初始化
3.2 vector对象的操作
4 迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型
5 标准库bitset类型
定义形式:bitset<32> bitvec; //32bits,all zero
和vector区别:需在尖括号内指出长度值