C/C++基础----类(1)

类的定义

  类的定义由关键字class指定,类中可以由变量和方法。使用private,public,protect来修饰这些变量和方法。对于私有变量和方法,类不会将其暴露但是,也就是说在外部不能直接访问到类内的私有成员。但是可以通过共有成员来访问私有成员和方法。

#include<stdio.h>
#include<iostream>

class Rect
{
//私有成员变量
private:
	int pos_x;
	int pos_y;
	int width;
	int height;
//共有成员
public:
	void set_para(int _w, int _h)
	{
		//设置参数
		width = _w;
		height = _h;
	}
	void show_info()
	{	
		//打印信息
		printf("width = %d; height = %d; length = %d\n", width, height, 2 * (width + height));
	}
};

int main()
{
	//通过类创建一个对象
	Rect R1;
	//设置对象参数
	R1.set_para(2, 3);
	//显示对象信息
	R1.show_info();

	getchar();
	return 0;
}

在这里插入图片描述
  可以看到在main函数中通过公有方法访问到了对象的私有成员,在上面的简单代码中,还存在问题就是在通过带哦用共有方法来创建对象时,还有两个参数没有指定。本来按道理来说,这样创建对象时不完整了,但是由于类有构造函数和析构函数,因此可以生成一个对象,且生成的对象的成员变量有初始值。

构造函数

  构造函数是由类在创建对象时自动调用的,构造函数的调用,于前面介绍的缺省有相似的含义。构造函数会默认调用。
  类中的构造函数于类名相同并且可以重载。

#include<stdio.h>
#include<iostream>

class Rect
{
private:
	int pos_x;
	int pos_y;
	int width;
	int height;

public:
	Rect(int _w, int _h)
	{
		width = _w;
		height = _h;
		pos_x = 0;
		pos_y = 0;
	}

	Rect()
	{
		width = 5;
		height = 5;
		pos_x = 0;
		pos_y = 0;
	}

	void set_para(int _w, int _h)
	{
		width = _w;
		height = _h;
	}

	void show_info()
	{
		printf("width = %d; height = %d; length = %d\n", width, height, 2 * (width + height));
	}

};

int main()
{
	Rect R1;
	Rect R2(2, 3);
	R1.show_info();
	printf("---------------------------\n");
	R1.set_para(2, 3);
	R1.show_info();
	printf("---------------------------\n");

	R2.show_info();
	printf("---------------------------\n");
	R2.set_para(10, 10);
	R2.show_info();

	getchar();
	return 0;
}

在这里插入图片描述
  从上面可以看出,使用构造函数,可以在创建对象时对对象进行初始化,在之后依然可以使用公有方法来改变对象的成员。并且在创建R1,R2时,调用的构造函数不相同。

析构函数

  析构函数时当类所创建的对象的声明周期结束时会自动调用的方法。其方法名也与类名相似,在其方法名前有个~。析构函数一般自动调用即可。

#include<stdio.h>
#include<iostream>

class Rect
{
private:
	int pos_x;
	int pos_y;
	int width;
	int height;

public:
	Rect(int _w, int _h)
	{
		width = _w;
		height = _h;
		pos_x = 0;
		pos_y = 0;
	}

	Rect()
	{
		width = 5;
		height = 5;
		pos_x = 0;
		pos_y = 0;
	}

	~Rect()
	{
		printf("析构函数被调用\n");
	}

	void set_para(int _w, int _h)
	{
		width = _w;
		height = _h;
	}

	void show_info()
	{
		printf("width = %d; height = %d; length = %d\n", width, height, 2 * (width + height));
	}

};

int main()
{
	{
		Rect R1;
		R1.show_info();
		printf("---------------------------\n");
		R1.set_para(2, 3);
		R1.show_info();
		printf("---------------------------\n");
	
	}

	Rect R2(2, 3);
	R2.show_info();
	printf("---------------------------\n");
	R2.set_para(10, 10);
	R2.show_info();

	getchar();
	return 0;
}

在这里插入图片描述
  可以看到在R1生存周期结束时,自动调用了析构函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值