C++封装:类和对象

2-1 C++类和对象

在这里插入图片描述


在这里插入图片描述
目的不同,抽象出的信息不同;

对象是具体的事物;
类是从对象中抽象出来的,出于不同的目的,同一事物可以被抽象为不同的类;


在这里插入图片描述
封装:把实现细节封装起来,只暴露给用户关心的部分;
在这里插入图片描述


怎么实现希望暴露和希望隐藏:访问限定符
在这里插入图片描述


扩展:结构体和类的区别:
1.语法定义上的区别:定义类使用关键字class 定义结构使用关键字struct;
2.结构体中声明的字段无法赋予初值,类可以;
3.结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制;
4.结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是引用(这是他们最大的区别);
5.struct变量使用完之后就自动解除内存分配,class实例有垃圾回收机制来保证内存的回收处理;

结构体和类的适用场合分析:
1、当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
2、对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;
3、在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。
4、大多数情况下,目标类型只是含有一些数据,或者以数据为主。


2-2 C++类对象的定义

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
上图中:p[i]->type会编译出错,p[i].type就不会(?);
解答:栈只能用. 堆都可以用


代码示例:

#include<iostream>
#include<stdlib.h>
using namespace std;

class Coordinate
{
public:
	int x;
	int y;
	void printx()
	{
		cout<<x<<endl;
	}
	void printy()
	{
		cout<<y<<endl;
	}
};


int main()
{
	Coordinate a;
	a.x=10;
	a.y=20;
	a.printx();
	a.printy();

	Coordinate *p=new Coordinate();
	if(p==NULL)
	{
		return 0;
	}
	p->x=30;
	p->y=40;
	p->printx();
	p->printy();
	delete p;
	p=NULL;

	Coordinate *q=new Coordinate[3];
	if(q==NULL)
	{
		return 0;
	}
	q[0].x=10;//用->会报错:左操作数有“class”类型,使用“.”  (?)
	q[0].y=20;
	q[0].printx();
	q[0].printy();
	delete []q;
	q=NULL;

	system("pause");
	return 0;
}
发布了39 篇原创文章 · 获赞 51 · 访问量 2076

猜你喜欢

转载自blog.csdn.net/qq_42745340/article/details/104513595