目录
1.class类的基础知识点
1.1class类的格式
class 类名{ 构造函数(public); 访问权限(public, protected,private): 成员变量; 成员函数; 析构函数(public); }
1.2访问权限
public(公共成员):
在父类、子类及其类内、类外都能调用的成员(变量或者函数)。
private(私有成员):
只能在类内的成员函数访问,子类及其类内、类外都不能访问的成员。
protected(受保护成员):
父类和子类的类内可以访问,二者的类外都不能访问。
在C++中,类的默认访问权限是private,结构体的默认访问权限是public。
1.3构造函数(创建对象时,自动调用)
class 类名{ public: 类名(){};//构造函数 }
构造函数名与类名相同,无返回值,不允许显式调用,默认有一个无参构造函数。
可以添加参数(可以重载),当定义了一个新的构造函数时,默认的无参构造将会被删除。
1.4析构函数(对象销毁时,自动调用)
class 类名{ ~类名();//析构函数 }
析构函数名是在类名前加上~,无返回值,无参数,一个类只能有一个析构函数,
但允许显式调用。
1.5关于构造和析构的补充
类的构造和析构函数如果没有定义的话,编译器会给类定义默认public权限的无参的构造和析构函数。这时是可以在类外实例化类的。
如果定义了无参数的构造和析构函数话,则默认是private权限
(但是可以使用public权限),使无法在类外实例化的。
单例类的构造和析构函数就是private权限的。
2.class类的两种实例化方法
2.1不使用new的实例化
class A{}; A a(); A a = A();
当存在无参构造时,a后面的()可以省略。上述的两种实例化并无本质区别。
2.2使用new的实例化
class A{}; A *a = new A();
2.3使用和不使用new的区别
不使用 new 是在栈中为对象分配内存,
使用 new 则属于动态内存分配是在堆中为对象分配内存。
这两种方式在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。
如果创建对象需要使用的内存较多,则需要使用 new 来动态分配内存,创建对象只需要消耗的内存不多则可以直接分配内存。
使用 new 创建的对象,在不需要使用的情况下需要我们手动使用 delete 删除释放该对象占用的内存,没有使用 new 创建的对象在不使用的情况下系统会自动回收被占用的内存。
观看如下代码:
// // Created by 彭同学 on 2023/5/30. // #include "test1.h" class A{ public: int a; int b; public: A(int a,int b){ cout<<"调用构造函数"<<endl; this->a=a; this->b=b; } ~A(){ cout<<"调用析构函数"<<endl; } }; int main(){ A *a = new A(10,10); return 0; }
运行结果:
可以发现程序结束后,我的析构函数并没有调用。
但是当我使用非new实例化后,
![]()
说明使用new实例化的对象,需要手动delete释放内存。