C++class类的详解

文章详细介绍了C++中的class类基础,包括类的格式、访问权限(public、private、protected)、构造函数和析构函数的使用,以及类的两种实例化方法——栈上实例化和堆上实例化(使用new关键字)。特别强调了使用new创建的对象需要手动delete释放内存,否则可能导致内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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

int main(){
    A *a = new A(10,10);
    return 0;
}

运行结果:

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

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

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值