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;
}