C++从入门到放弃--15.类(进阶)

文章介绍了C++中的类以及构造函数和析构函数的概念。构造函数在对象创建时自动调用,用于初始化成员变量,有默认和带参数两种形式。析构函数则在对象销毁时执行,通常用于释放动态分配的内存。文章通过示例代码详细阐述了这两个概念及其使用场景。
摘要由CSDN通过智能技术生成

Hello~好久没更新了,据本人所知,上次距离现在至少有一个世纪一个月的历史。

今天我们继续学习类,但是有一些新的不好学的东西。

1.回顾

上一次我们学习了类,类相当于结构体。

需要这样使用:

class <类名> {
    <成员>
};

2.构造函数和析构函数

2.1.构造函数

在我们每一次创建一个对象时,这个函数就会被调用,它叫构造函数。

它的函数名,就是类名!

比如:

class Vector {
    int x;
    int y;
    int way;
};

它的构造函数是:

Vector() {
    
}

从中可以看出,Vector没返回值,这里。。。切记!

虽然构造函数没有返回值,但是它的属性并不是void!

(也不是什么乱七八糟的指针什么的)

没有这个函数,我们的类没办法运行。

2.1.1.默认构造函数

但是,比如你测试时,发现你不写构造函数,也能运行。

因为我们的Dev-C++非常的狗血良心,它会给我们提供一个默认的构造函数。

就是:

<类名>() {
    
}

当然,它不是不能干事,比如我们给它承担一个初始化的工作:

class Vector {
    public:
        int x;
        int y;
        int way;
    private:
        Vector() {
            x = 0;
            y = 0;
            way = 0;
        }
};

这里只是做一个演示,构造函数不管你放public,还是private,不会报错的。

但是,如果我们想在新建对象时初始化:

Vector v = {1 /*x*/, 2/*y*/, 90 /*way*/};

会寄。

2.1.2.带参的构造函数 

怎么办呢?

可以把构造函数上挂形参:

Vector(int a, int b, int c) {
    x = a;
    y = b;
    way = c;
}

试一下:

#include <bits/stdc++.h>
using namespace std;

class Vector {
	public:
		int x;
		int y;
		int way;
		Vector(int a, int b, int c) {
			x = a;
			y = b;
			way = c;
		}
};

int main() {
	Vector v = {1, 2, 90};

	cout << v.x << " " << v.y << " " << v.way;

	return 0;
}

(不知道什么叫<bits/stdc++.h>的,翻我前面的东西。)

这时候,需要把构造函数放到public里面。要不然:

也就是说,根据上面的东西,下面的都等价:

Vector v = {1, 2, 90};        //大括号初始化(C++11)
Vector v = Vector(1, 2, 90);  //显式调用构造函数
Vector v(1, 2, 90);           //隐式调用构造函数

 2.2.析构函数

跟构造函数一样,在对象寄了的时候,析构函数会被调用。

2.2.1.默认析构函数

就是:

~<类名>() {
    
}

也就是说,对于Vector,它的(默认)析构函数如下:

~Vector() {
    
}

析构函数跟构造函数不一样,它不能有参。

2.2.2.析构函数

一般,我们直接定义析构函数,它的用途是清理指针用的new(malloc()),在析构函数里调用delete(free())。

比如:

class Vector {
    public:
        int * x;
        int * y;
        int * way;
        Vector(int a, int b, int c) {
            x = new int; //malloc(sizeof (int))
            y = new int;
            way = new int;
            *x = a;
            *y = b;
            *way = c;
        }
        ~Vector() {
            delete x;   //free(x);
            delete y;
            delete way;
        }
};

此外,还有移动构造函数,移动析构函数等等,不再介绍。

拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值