C++学习 类

C++学习

作为一个面向对象的语言,C++当然有所有面向对象的语言都拥有的类。
因为C++是C语言的超集,所以C++的类既包含原来C语言的结构与联合,又包含了新的class类。

结构与联合

结构与联合是C语言中所包含的传统结构体。
struct是定义结构体的保留字

struct student{
	char name[10];
	int score;
}stu;

这里定义了一个简单的结构体,能够储存学生的姓名和分数两种数据,是可以公开访问的。
联合类似。
联合的特点是所有的数据共用一个内存地址。

union student{
	int a;
	char b;
	char c;
};

这里的b和c就与a共享内存

class类

class 类型名{
	public:
	公有成员(包括函数以及数据);
	protect:
	受保护成员;
	private:
	私有成员;
};

class类里共有三种成员类型。
第一种:公有成员
包括函数成员和数据成员,文件中可以自由调用的数据与函数。
第二种:私有成员
这种成员性质很好的体现了C++语言的封装的性质,是class类区别于其他类的重要性质。是能够很好的阻止无意间的越权访问。
第三种:保护成员
在未学习继承与派生之前,可以看作与私有成员差不多。

PS:如果未注明,那么在class类中声明的成员视作私有成员。struct中声明的视作公有。这一特点能更好的兼容C语言的结构体。

类的函数

构造函数

构造函数,是类中一个必要的函数。可以不声明,那么类中将会自己默认定义该函数,且函数体为空,当然,我们也可以自己进行定义。在变量及函数生命周期开始时,构造函数会自己调用。值得注意的是,构造函数是一个与类同名的函数,并且构造函数是一个没有返回值的函数。

class stu{
	stu (){
	
	};
}
析构函数

析构函数,同样是类中一个必要函数,也可以不声明。类中将会自己默认定义该函数,且函数体为空,当然,我们也可以自己进行定义。在变量及函数生命周期结束时会自动调用。一般如果有指针成分,可以通过判断指针是否为空来确定是否析构。与构造函数类似,析构函数也没有返回值。但在类名前多了一个~符号。

class stu {
	~stu (){
	
	};
};
局部类

局部类是☞在函数体中或者类体中定义的类。
因为C++不支持函数嵌套定义,因此我们如果需要定义一个函数,可以在局部类中定义函数体,这样该函数会自动成为inline函数成员。

new与delete

相较于C语言利用malloc和free来管理堆空间内存,C++里更多的使用new和delete这两个保留字来管理堆空间内存。
new负责分配对象内存,分配内存后,调用构造函数构造对象;
delete负责释放内存,在释放内存之前,调用析构函数析构对象。

#include <malloc.h>
#include <process.h>
class ARRAY{
	int *a;
	int r,c;
public:
	ARRAY(int x,int y);    //构造及析构函数的访问权限为public
	~ARRAY(); 
};
ARRAY::ARRAY(int x,int y)
{
	a=new int[(r=x)*(c=y)];    //整形数组a不需构造,可以用malloc
}
ARRAY::~ARRAY()
{
	if(a){delete a;a=0;}   //整形数组a不需析构,可以用free
}
ARRAY x(3,5);
void main (void)
{
	int error=0;
	ARRAY y(3,5),*p;
	p=new ARRAY(5,7);//对于P的new,分配内存空间,我们应当注意,这里有构造函数,不能使用malloc;
	switch(error){
		case 0: delete p;//对于p,ARRAY要调用析构函数,不能用free
				return; 
		case 1: y.~ARRAY();//先析构,再退出
				delete p;
				exit(1);//先delete再exit;
		case 2:	x.~ARRAY();
				y.~ARRAY();//先析构,再退出
				delete p;
				abort();		
	}
	delete p;
}

程序可能吃编译器,代码有什么问题,可以帮我滴滴BUG。
下次再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值