1.C++定义常量两种方式 1.#define (定义文件头) 2.const.
2 sizeof关键字 统计数据类型所占内存大小。
3.e 的用法:3e2; // 3 * 10 ^ 2 , 3e-2; // 3 * 0.1 ^ 2。
4.字符型 1.在显示字符型变量时,用单引号将字符括起来,不要用双引号 2.单引号内只能有一个字符,不可以是字符串。
5. 三目运算符 表达式1 ? 表达式2 :表达式3。
6.goto语句 如果标记的名称存在,执行到goto语句时,会跳转到标记的位置。
7.在64为操作系统下,指针都是8个字节。
8.空指针:指针变量指向内存中编号为0的空间,空指针指向的内存是不可以访问的 int * p = NULL;。
9.const修饰指针 1.const修饰指针 --- 常量指针 2.const修饰常量 --- 指针常量 3.const即修饰指针,又修饰常量。
10.new操作符 1.C++中利用==new==操作符在堆区开辟数据 2.利用new创建的数据,会返回该数据对应的类型的指针
11.1.delete p;/利用delete释放堆区数据 2. delete[] arr;
12.引用 1.作用: *给变量起别名 2.作用: *给变量起别名。 注意1.引用必须初始2.化引用在初始化后,不可以改变
13.当引用做函数返回值的适合, 局部变量不能返回引用地址,必须在变量上加上static。
14.引用不能直接赋值,int &a=4;错 但可以是 const int &a=4; 不可以修改其值。
15.函数占位参数 C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置void fun(int)
16.函数重载 1.同一个作用域下 2.函数名称相同 3.函数参数类型不同 或者 个数不同 或者 顺序不同
17.函数重载需要注意,函数默认参数不能参与函数重载,会产生重载。
18.封装的三种 //三种权限
1.//公共权限 public 类内可以访问 类外可以访问。
2.//保护权限 protected 类内可以访问 类外不可以访问。
3.//私有权限 private 类内可以访问 类外不可以访问。
19. struct和class区别 1.struct 默认权限为公共 2.class 默认权限为私有
20.函数析构和构造 1.构造函数语法:类名(){} 2.析构函数语法: ~类名(){}
21.函数的构造三种写法 1. Person p1(10); 2.Person p2 = Person(10); 3.Person p4 = 10; // Person p4 = Person(10);
//Person newman3; //newman3 = man; //不是调用拷贝构造函数,赋值操作
22.当类指针成员不能直接指向传过来的成员,需要开辟地址,num=new int(height).
23.C++提供了初始化列表语法,用来初始化属性 构造函数():属性1(值1),属性2(值2)... {}.
24. 类对象作为类成员 class A {}class B{ A a;} 类对象做类成员时,可以先初始化a,然后 a(11,22)中传入参数。
25.类中静态成员
1.静态成员变量
所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化
2.静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
26.类外初始话 int Person::a=12; 类外初始化可以访问私有类成员。
27.在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。
28.this指针概念 this指针指向被调用的成员函数所属的对象
this指针的用途:
1.当形参和成员变量同名时,可用this指针来区分
2.在类的非静态成员函数中返回对象本身,可使用return *this
29.空指针访问成员函数 Person * p = NULL; this == NULL判断是否为空。
30. const修饰成员函数 1.常函数内不可以修改成员属性 2.成员属性声明时加关键字mutable后,在常函数中依然可以修改
3.成员函数后加const后我们称为这个函数为常函数 列子void ShowPerson() const{};
31.常对象:1.声明对象前加const称该对象为常对象 2.常对象只能调用常函数和成员 3.示例: const Person person;
32. 友元 1.全局函数做友元(可以访问私有成员)2.类做友元(需要定义函数才能访问私有成员)
33.当类成员指向别的类时,需要前面(1.类在前面已经定义好,2.类声明,并且在类外空间写指向)。
34.运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
Person operator+(const Person& p) {} 返回对象 operator 运算符(传入相关地址){}。
35.子类对象加作用域可以访问到父类同名成员 s.Base::m_A
36. 多继承中如果父类中出现了同名情况,子类使用时候要加作用域 。
37.菱形继承 继承前加virtual关键字后,变为虚继承(解决重复继承问题)(共享一份空间)。
38.多态满足条件: 1、有继承关系 2、子类重写父类中的虚函数 多态使用:父类指针或引用指向子类对象。
38.多态可以 父类指向子列,可以调用重写父类的函数。 AbstractCalculator *abc = new AddCalculator;
39.纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为==抽象类==。
类中只要有一个纯虚函数就称为抽象类 //抽象类无法实例化对象子类必须重写父类中的纯虚函数,否则也属于抽象类
40.虚析构和纯虚析构区别:如果是纯虚析构,该类属于抽象类,无法实例化对象
虚析构语法:virtual ~类名(){} 纯虚析构语法:virtual ~类名() = 0;
41.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构 拥有纯虚析构函数的类也属于抽象类
42.操作文件的三大类: 1.ofstream:写操作 2.ifstream: 读操作 3.fstream : 读写操作
43.打开方式 解释 open("文件名",ios::in)不用加引号。 利用<<可以向文件中写数据
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式
用二进制方式写文件 ios::binary | ios:: out
44. string buf 读文件 while (ifs >> buf){cout << buf << endl;}
45.利用is_open函数可以判断文件是否打开成功 打开成功为True 打开失败为False.
46.二进制方式写文件主要利用流对象调用成员函数write 读文件用read 原型ostream& write(const char * buffer,int len);
47.fs.eof() 判断文件是否为空。 char ch; fs>>ch if(fs.eof()) {文件为空}
48.work** p 可以先写函数, 在赋值,在调用函数。
49.函数模板 template<typename T> 1.template --- 声明创建模板 2.typename --- 表面其后面的符号是一种数据类型,
可以用class代替 3.T --- 通用的数据类型,名称可以替换,通常为大写字母
注意事项:1.自动类型推导,必须推导出一致的数据类型T,才可以使用 2.函数模板必须要确定出T的数据类型,才可以使用。
50.普通函数与函数模板的调用规则
1. 如果函数模板和普通函数都可以实现,优先调用普通函数
2. 可以通过空模板参数列表来强制调用函数模板
3. 函数模板也可以发生重载
4. 如果函数模板可以产生更好的匹配,优先调用函数模板
51.模板 具体化 bool test1(T& a, T& b) {} 接上template<> bool test1(Person& a, Person& b) {}。
52.cin.get() 获取一个数。
53.类模板与函数模板区别主要有两点: 1. 类模板没有自动类型推导的使用方式 2. 类模板在模板参数列表中可以有默认参数
54.类模板中成员函数和普通类中成员函数创建时机是有区别的:
1.普通类中的成员函数一开始就可以创建
2.类模板中的成员函数在调用时才创建
55.类模板对象做函数参数 一共有三种传入方式:
1. 指�