C++class类的详解

目录

1.class类的基础知识点

1.1class类的格式

1.2访问权限

1.3构造函数(创建对象时,自动调用)

1.4析构函数(对象销毁时,自动调用)

1.5关于构造和析构的补充

2.class类的两种实例化方法

2.1不使用new的实例化

2.2使用new的实例化

2.3使用和不使用new的区别


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<<"调用构造函数"<a=a;
        this->b=b;
    }
    ~A(){
        cout<<"调用析构函数"<

运行结果:

 可以发现程序结束后,我的析构函数并没有调用。

但是当我使用非new实例化后,

 

说明使用new实例化的对象,需要手动delete释放内存。

你可能感兴趣的:(C/C++学习,c++)