(完整版)C++学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
endl换行符,也是std成员函数
4).io流运算
cout控制台输出—屏幕上终端窗口,带缓冲<<插入运算符
cin控制台输入—键盘>>提取运算符
5).名字空间
Std:标准c++库所提供一切函数、对象、类型都隶属于std名字空间。
::-作用域限定符---名字空间“的”某个对象。
+= -=
名字冲突:看作用域。同一作用域不可使用相同名字。----解决方法:成员前加名字空间名,中间::
3.名字空间
namespace 名字空间名{
名字空间成员1;
名字空间成员2;//名字空间成员可以是变量、函数、类型
}
名字空间名::名字空间成员1
名字空间合并:同一个名字空间可以分别书写在不同的namespace子句中,只要它们的名字相同,仍然会被编译器识别为同一个名字空间。
Namespace名字空间名{
名字空间成员1;
}
namespace名字空间名{
名字空间成员2;
}
名字空间成员的声明和定义可以分开写,但是定义部分需要借助作用域限定符“::”指明所定义的成员隶属于哪个名字空间。
名字空间指令:using namespace名字空间名;
名字空间指令以后的代码,对名字空间中的所有成员可见,可以直接引用,无需作用域限定符。使用时要注意不要引入新的名字冲突。
名字空间声明:using名字空间名::名字空间成员;
名字空间声明用于将名字空间中的特定标识符引入当前作用域,可以省略作用域限定符,直接引用之。使用时注意不要因此引入新的名字冲突。
无名名字空间:不隶属于任何名字空间的标识符,编译器就将其缺省地放入无名名字空间。对于无名名字空间中的成员,可以直接使用“::”进行访问。
名字空间允许多层嵌套,访问时需要逐层分解。可利用名字空间别名简化名字空间嵌套路径的书写形式。
Using只能看里面一层。
4.结构、联合和枚举
1)所有的类型
关键字在声明变量时都可以省略。
struct Date{ //Date结构名
int year; //成员变量(成员表列)(类型说明符成员名)
int month;
int day;
void show(void)//成员函数
{
}
};
Int main(void){ //全局变量
Date d = {2016,8,2},*e = &d;//e是指向d的指针
d.show(); //“.”直接成员访问运算符
e->show (); //“->”间接成员访问运算符
return 0;
}
struct Date d = {2016,8,2};//C/C++
Date d = {2016,8,2};//C++ //类型关键字省略
2)C++中结构体可以包含函数(一个int四个字节,函数不放变量中,放代码区)
成员函数的调用,前面要写“.”“->”
定义结构体时不能同时初始化!
3)C++中增加了匿名联合。借用了联合语法形式,定义变量的内存布局。
4)C++中枚举是一种整型的数据类型,其取值范围也是类型的一部分,因此在和整型进行类型转换时会受到约束。
5.字符串
子面值:“Hello,World!”
字符指针:“char const* p = 字符串”;
字符数组:char ca[] = “字符串“;
string对象:string s = “字符串“;
简单、安全、一致。
栈是一种数据结构。栈可以用来存放一组数字,这些数字按照时间先后被放到栈里,从栈里获得数字的时候一定是最后一个放进去的数字,这个规则叫做后进先出。实现栈的时候使用push函数向里面放数字,使用pop函数从栈里获得数字。实现栈的时候最前面数字所在存储区位置固定,最后面数字所在存储区位置不断变化。
字符串比较函数strcmp(const char[ ],const char[ ]);
如果str1等于str2,函数值为0;
大于,正整数;
小于,负整数。
c.size:字符串长度
sizeof(c):求c这个字符串的字节大小(跟字符串长度无关)——string里存的是字符串地址。所占内存为动态内存,在堆空间里。
#include
#include
#include
6.布尔类型:bool
逻辑值:真和假
True/false
1/0
任何类型都可以隐式转换为布尔类型,(bool b;b = 1234;)其转换规则就是只要源类型数据的值为0就是假(false),否则就是真(true)。
在C++中关系表达式和逻辑表达式的值的类型是bool而不是int
7.操作符别名(unimportant)
8.重载
1)同一个作用域中,函数名相同,参数表不同的函数,构成重载关系。
2)在调用具有重载关系的函数时,编译器会根据所提供的实参表,选择与之相适应的重载版本,这个过程叫做重载解析。
void foo(void);
void foo(int n);
void foo(int* p);
char const* foo(int n,double d);
char const* foo(double d,int n);
char const* foo(double x,int y);//非法,参数名与重载无关
int foo(void);//非法,返回类型与重载无关【调用时重载解析】
3)直接调用函数,编译器是在编译函数调用语句时进行重载解析。通过函数指针调用函数,编译器是在编译对函数指针初始化或赋值的语句时进行重载解析。
4)只有同一作用域中的同名函数才涉及重载问题,不同作用域中的同名函数遵循名字隐藏原则。同时,需要注意名字空间指令和名字空间声明对可见性以及作用域的影响。