此处讲两个知识点:
1.类的访问权限:
//类的访问权限检查时机
//在编译时期对访问权限进行限制,在程序运行时期可以进行修改
突破访问权限的方法:
//如何突破类的限制访问类的成员变量?常规语法不可以,可以通过指针的方式进行访问 //左侧含义,&clock取对象地址,(int*)&clock将地址强制准换为int指针,*(int*)&clock取指针下的内容 *(int*)&clock = 111;
2.利用C语言模拟类的封装
个人总结:此处讲了C到C++的过程,其中的指针可以看做C++的this指针(理解可能不够深刻)
封装方法:
**//封装:**
//函数指针,相当于变量,需要赋值
typedef void((*PFN_SetHour)(int n));
//C语言模拟类的封装
struct taglock {
int nHour;
int nMinute;
int n_Second;
PFN_SetHour pfnSetHour;
};
void SetHour(struct taglock* c1,int n) {
c1->nHour = n;
}
//调用函数
struct taglock c1;
c1.pfnSetHour = SetHour;
//类似于类中成员函数的调用
c1.pfnSetHour(&c1,1);
3.学习地址:类的访问权限及C语言模拟类的封装
4.学习笔记:
#include#include "clock.h" //面向对象: //三个特点 //1.封装 //2.继承 //3.多态 //封装特点 //C++中对结构体(C中只有数据)进行了扩展,允许将函数放到结构中 //把数据及数据操作的方法放在一起组成一个结构体 struct Cloth{ int nColor; int nSize; }; //结构体:内部成员可以随便访问,默认公有 struct WashMchine { private: int nWidth; int nHeight; int nLength; int nType;//类型(滚筒,波轮) int nBland;//品牌 void wash(Cloth& cl) { printf("洗衣服 颜色=%d 大小=%drn",cl.nColor,cl.nSize); } }; //class--类:命名一般是在前加C,默认为私有权限 class CWashMchine { //成员变量一般私有 private: //数据成员/成员变量(member)命名规范前加m_ int m_nWidth; int m_nHeight; int m_nLength; int m_nType;//类型(滚筒,波轮) int m_nBland;//品牌 //成员函数一般公有 public: //成员函数 void wash(Cloth& cl) { printf("洗衣服 颜色=%d 大小=%drn", cl.nColor, cl.nSize); } }; //访问权限(指在当前类域之外访问的规则) //1.public 公有(类域内外均可访问的权限) //2.protect 保护(继承中使用) //3.private 私有(类域中可以访问,类域外无法访问) //结构体 默认的访问权限是public //类 默认访问权限是private //函数指针,相当于变量,需要赋值 typedef void((*PFN_SetHour)(int n)); //C语言模拟类的封装 struct taglock { int nHour; int nMinute; int n_Second; PFN_SetHour pfnSetHour; }; void SetHour(struct taglock* c1,int n) { c1->nHour = n; } //类的访问权限检查时机 //在编译时期对访问权限进行限制,在程序运行时期可以进行修改 //某一个函数不是孤立存在的,是依靠某一个对象存在的 int main(int argc,char* argv[]) { //类名 对象(类的实例化) CWashMchine wm; Cloth cl; wm.wash(cl); CClock clock; //clock.m_nHour = 1; struct taglock c1; c1.pfnSetHour = SetHour; //类似于类中成员函数的调用 c1.pfnSetHour(&c1,1); //如何突破类的限制访问类的成员变量?常规语法不可以,可以通过指针的方式进行访问 //左侧含义,&clock取对象地址,(int*)&clock将地址强制准换为int指针,*(int*)&clock取指针下的内容 *(int*)&clock = 111; clock.SetHour(25); return 0; }



