基础的知识就不写了,主要是做笔记,忘了可以快速捡起这些知识。
类定义
class ClassName
{
public:
...
private:
...
};
实例化
int mian()
{
ClassName varName;//栈中实例化,使用完不需要手动回收
ClassName arrVar[10];
ClassName *p=new ClassName();//堆中实例化,使用完需要手动回收,delete p;如果是数组 delete []p;
ClassName *q=new ClassName[10];
}
对象成员的访问
varName.fun();//栈定义的对象
arrVar[0].fun();
p->fun();//堆上定义的对象
q[0]->fun();
封装
class ClassName
{
public://定义相关函数进行封装
dataType getVar(){...}
void setVar(dataType var){...}
...
private://定义相应的私有数据成员
datatype priVar;
...
};
内联函数
编译时将函数代码和实参代替函数调用语句,要求函数简单。
inline void FuncInline()
{
printf("FuncInline\n");
}
void Func1()
{
FuncInline();
}
类内定义
将成员函数的函数体写在类内。编译器会优先以inline内联函数方式进行编译(不会显示出来),但是无法编译成内联函数时,才会以普通函数编译方式进行编译。
类外定义
class ClassName
{
public://定义相关函数进行封装
dataType getVar();
void setVar(dataType var);
...
};
void ClassName::getVar(){...}
void ClassName::serVar(dataType var){...}
分文件类外定义
ClassName.h
class ClassName { public://定义相关函数进行封装 dataType getVar(); void setVar(dataType var); ... };
ClassName.cpp
include "ClassName.h" void ClassName::getVar(){...} void ClassName::serVar(dataType var){...}
内存分区
栈区:
int x=0;int *p=NULL;
//由系统进行控制
堆区:int *p=new int[20];
//需要程序员自己管理
全局区:存储全局变量及静态变量
常量区:string str="hello";
代码区:存储逻辑代码的二进制
//编译之后的代码
定义完类,是不会占用栈区和堆区的内存; 实例化后,每个对象会在栈上占用一段内存; 逻辑代码只编译出一份,放在代码区,供所有对象使用
类的初始化
构造函数
1.在实例化时自动执行
2.构造函数与类同名
3.构造函数无返回值
4.构造函数可以有多个重载形式
5.实例化对象时仅用到一个构造函数
6.当用户没有定义构造函数时,编译器自动生成一个构造函数,但不做任何事情public: ClassName(){...}//无参 ClassName(...){...}//有参 //上述两行构成重载构造函数,规则是参数个数不同,或类型不同,或顺序不同。
默认构造函数
在实例化不需要传递参数的构造函数称为默认构造函数
构造函数的初始化列表public: ClassName():va1("hello"),var2(10){}//先于构造函数执行,初始化列表只能用于构造函数,此方式速度快效率高 //初始化列表可以初始化对象中的常量,而构造函数不可以 private: string var1; int var2;
拷贝构造函数
ClassName var1; ClassName var2=va1; ClassName var3(var1); //后两句会执行拷贝构造函数 //格式:类名(const 类名 & 变量名) 例如 public: ClassName(const ClassName & var){}
析构函数
~ClassName(){}//不允许加参数