注:转载请标明原文出处链接: https://lvxiaowen.blog.youkuaiyun.com/article/details/107194105
1 类与对象的定义
狗可以表示为一个类。下图中,当具体到某只狗的信息和技能时,可以称之为对象。
当有多只狗时,为了便于管理,可以建立表格:
将狗的信息抽象出来,定义一个类,如下图:
类是对现实生活中一类具有共同特征的事物的抽象,类的内部封装了属性和方法,类的构成包括数据成员和成员函数。类的实例称为对象,对象是具体的事物。
2 封装
类抽象出来的并不是狗的全部信息。目的不同,抽象出的信息也不同。例如下图的TV类,定义了名字、型号、音量调节和电源控制。但仍有很多细节没有描述,但这不代表这些细节不存在,而是被隐藏起来了。
下图中电路板的工作过程并不展示给用户,而是选择性暴露信息。
封装:把实现细节封装起来,只暴露用户关心的部分。
3 访问限定符
访问限定符:public
、private
、protected
。成员和类的默认访问修饰符是 private
。
public
:任何类都可以访问。
private
:只有本类中的成员函数可以访问。
protected
:只有本类和继承类可以访问。
4 对象实例化
对象实例化:计算机根据一个类的设计,制造出多个对象的过程。
4.1 实例化对象的方式
(1)从栈实例化对象: TV tv;
(2)从堆实例化对象: TV *p = new TV();
对堆进行实例化时要注意需要判断new失败的情况,即:if( NULL == p){return 0;}
5 对象成员的访问方法
6 对象实例化及访问示例
题目描述:
定义一个坐标类,
数据成员:x和y
成员函数:分别打印和y的值
#include <iostream>
#include <stdlib.h>
using namespace std;
class Coordinate
{
public:
int x;
int y;
void printX()
{
cout << "x =" << x << endl;
}
void printY()
{
cout << "y =" << y << endl;
}
};
int main()
{
Coordinate coor; //从栈实例化对象
coor.x = 10;
coor.y = 20;
coor.printX();
coor.printY();
Coordinate *p = new Coordinate(); //从堆实例化对象
if (NULL == p) //确定内存有没有申请失败,若失败则终止
{
return 0;
}
p->x = 100;
p->y = 200;
p->printX();
p->printY();
delete p;
p = NULL;
system("pause");
return 0;
}
运行结果:
7 struct和class区别
- struct默认是公有继承(public),class默认是私有继承(private)
- struct中默认的成员访问权限是public的,而class中则是private的。
- class还可用于定义模板参数,如typename,但是关键字struct不能用于定义模板参数。
参考资料
[1] https://www.imooc.com/learn/381
[2] https://www.runoob.com/cplusplus/cpp-class-access-modifiers.html
[3] https://blog.youkuaiyun.com/qq_37964547/article/details/81835488