C++ 类
创建: 2019/01/29
完成: 2019/02/03
更新: 2021/04/19 原本忘记分类了,分类到C++
声明与定义 | |||||||
声明 |
class myclass { // private member int a; protected: int b; public: ... } object-list;
|
||||||
定义 |
函数的定义 return-type class-name::func-name(parameter-list) { // 函数定义 } // 例 void SampleClass::sampleFunction(void) { cout << "hello world!"; }
|
||||||
新建 |
myclass newInstance(...); // 参数直接指定 myclass newInstance = myclass(...);
|
||||||
构析函数和解析函数 | |||||||
构析函数 |
和类同名,不带返回值 class SampleClass { int a; public: SampleClass(int n); ~SampleClass(); void showA(); }; SampleClass::SampleClass(int n) { cout << "start to initialize new instance\n"; a = n; } SampleClass::~SampleClass() { cout << "start to kill the instance\n"; } void SampleClass::showA() { cout << "a: " << a << "\n"; }
|
||||||
解析函数 | 类名前加~, 不带参数, 不带返回值 | ||||||
继承 | |||||||
class derived-class-name : access-specifier base-class-name { ... };
|
|||||||
Object Pointer | |||||||
● 和其他类的指针一样 // 声明指针 SampleClass *p; // p为实例的内存地址, *p为实例 // 获取地址 SampleClass p; // p为实例,&p来获取地址
|
|||||||
类,构造体,共用体的关联 | |||||||
C++的类和结构体的区别 |
● C++的构造体可以有函数, 构析函数,解析函数 ● 类的成员默认非公开, 结构体成员默认公开(仅此而已) struct type-name { // public函数与属性 ... private: // 非publi函数与属性 } object-list;
|
||||||
共用体 | 略 # TODO | ||||||
行内函数(inline function) | |||||||
inline 函数名(参数) { ... return ...; } ● 把简单的函数定义成inline函数加快运行 ● 只是要求, 编译器无法满足时会作为普通函数来编译
|
|||||||
自动inline化 | |||||||
类内的简单的函数都可以自动设为inline | |||||||
object的代入 | |||||||
● 类型相同的可以带入,默认所有数据已比特为单位全部拷贝 ● 带入只是复制值, 两个实例任然是不一样的地址 |
|||||||
向函数传递object | |||||||
void letMeLookLook(Sample t) { ... }
● 和自带类型一样声明参数类型 ● 带入是复制 ● 复制的instance不会呼出构析函数,解放时会呼出解析函数 |
|||||||
从函数返回object | |||||||
Sample test() { return Sample(1); } ● 和自带类型一样声明返回类型即可 ● 函数内部用于返回的在函数结束时即会呼出解析函数并释放内存 ● 返回出来的是函数内部的instance的复制(不同内存地址), 此instance在函数返回值后即释放 ● 解析函数里有释放内存操作的返回后会有运行错误(因为内存被释放)
|
|||||||
friend函数 | |||||||
可以获取类的private成员的外部函数 class Sample { int a; public: Sample() {...} friend int friendFunction(Sample o1); // friend函数声明 } int friendFunction(Sample 01) { // 定义不需要加friend ... }
● friend函数也可以是其他类的函数 |
|||||||
用途 |
● 运算符重载 ● 用于编写某种输入输出函数 ● 检验/获取类的非公开属性 ● ... |
||||||
继承 | |||||||
对母类的access权限管理 |
class 类名 : 范围修饰符 继承的类 { // 省略的话默认为private, struct则为public ... } // 例 class Sample : public SuperClass { ... }
● 范围修饰符public, protect, private
● 制定要继承的类的public的内容在当前类的范围 ● 省略的话默认为private, struct则为public |
||||||
protect |
● 只有此类和继承此类的类能用, instance不能用
|
||||||
构析函数,解析函数的继承 |
|
||||||
多重继承 |
从左往右都好隔开 class 新建的类 : 范围修饰符 母类1, 范围修饰符 母类2, ... {}
● 构析函数运行顺序 母类1, 母类2, ..., 新建的类 ● 解析函数运行顺序 新建的类, ..., 母类2, 母类1 |
||||||
假想母类 |
● 多重参照时,两个母类共同继承了同一个更上层的母类时, 新类会有两个一样的母类 ● 为防止这种情况, 在继承的时候加上virtual class 新建的类 : virtual 范围修饰符 母类 { ... }
|