接上篇:C++57个入门知识点_14 面向对象及类(伪代码讲通、面向对象: 生活中事物描述成对象,对象之间产生关系,从而组织成程序;对象=数据(数据类型)+行为(函数)、以函数为单位把代码组织起来的),本篇将会介绍在C++中如何处理和使用类。
对编程有基础认识的人都知道面向对象的语言有三个特点:(1)封装;(2)继承;(3)多态
。今天主要介绍面向对象的基本特点-封装。
总结放于前:
C++中对结构体(C中只有数据)进行了扩展,允许将函数放到结构中,其数据及数据操作的方法放在一起组成一个结构体(数据与行为统一在一起),这种思想就是封装
。使用引用传递和修改实参
。
Class WashMchine {
void wash(Cloth& cl) {printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);}
}
void main {
wm.wash(cl)
}
类的三种访问权限:public、protect、private,结构体默认是公有权限,类默认是私有权限
1. 类的封装特点
C++中对结构体(C中只有数据)进行了扩展,允许将函数放到结构中,其数据及数据操作的方法放在一起组成一个结构体(数据与行为统一在一起),这种思想就是封装
。
1.1 传入实参的方法
请注意: 下面wm.wash(cl);
的写法只是将cl
对象做为形参拷贝了一份,传入到函数内,相当于衣服的拷贝在洗,本身没有洗。
struct WashMchine {
int nWidth;
int nHeight;
int nLength;
int nType;//类型(滚筒,波轮)
int nBland;//品牌
//传入的为形参
void wash(Cloth cl) {
printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);
}
};
int main(int argc, char* argv[])
{
WashMchine wm;
Cloth cl;
wm.wash(cl);
return 0;
}
我们需要传递指针或者引用去洗,这样洗的就是main中的对象,而不是拷贝,下面采用引用的方法实现修改实参。
#include <iostream>
//封装特点
//C++中对结构体(C中只有数据)进行了扩展,允许将函数放到结构中
//把数据及数据操作的方法放在一起组成一个结构体
struct Cloth {
int nColor;
int nSize;
};
struct WashMchine {
int nWidth;
int nHeight;
int nLength;
int nType;//类型(滚筒,波轮)
int nBland;//品牌
void wash(Cloth& cl) {
printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);
}
};
};
//某一个函数不是孤立存在的,是依靠某一个对象存在的
int main(int argc, char* argv[])
{
WashMchine wm;
Cloth cl;
wm.wash(cl);
return 0;
}
运行结果:
1.2 C++类的关键字Class
C++中的struct关键字,是对C中的扩展,允许将函数写入其中,但C++创建了一个关键字Class,突出C++中的封装
。
C++类的书写代码规范:类名一般是使用C开头(微软风格)
将代码进行,得到如下:
#include <iostream>
struct Cloth {
int nColor;
int nSize;
};
class CWashMchine
{
int nWidth;
int nHeight;
int nLength;
int nType;//类型(滚筒,波轮)
int nBland;//品牌
void wash(Cloth& cl) {
printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);
}
};
int main(int argc, char* argv[])
{
//类名 对象名(类的实例化)
CWashMchine wm;
Cloth cl;
wm.wash(cl);
return 0;
}
运行结果:显示private成员无法访问
出现上面的结果的原因是:结构体和类唯一的区别即为访问权限的区别
2. 类的三种访问权限
访问权限:指当前类域(Class的{}里所有的代码范围
)之外访问的规则(编译器做的限制)。
(1)public 公有(类域内外均可访问的权限);
(2)protect 保护(继承中使用);
(3)private 私有(类域中可以访问,类域外无法访问)
#include <iostream>
struct Cloth {
int nColor;
int nSize;
};
class CWashMchine
{
public:
int nWidth;
int nHeight;
int nLength;
int nType;//类型(滚筒,波轮)
int nBland;//品牌
private:
void wash(Cloth& cl) {
printf("洗衣服 颜色=%d 大小=%d\r\n", cl.nColor, cl.nSize);
}
};
int main(int argc, char* argv[])
{
Cloth cl;
CWashMchine wm;
wm.wash(cl);//wash只能在类域内进行访问,类域外访问会报错
return 0;
}
运行结果:main()
中无法访问private
中的函数
- 类和结构体有默认的访问权限,结构体默认是公有权限,类默认是私有权限
3.学习视频地址:C++57个入门知识点_15 类及类的访问权限