孙鑫C++课程笔记2——创建类
Lesson 2
一、结构体与类型的区别:
与C语言不同的是,在C++中的结构体允许拥有函数成员,这和类有很大的相似性,二者的主要差别在于成员的访问权限上:
*缺省状态下,结构体的成员一律默认为是Public的,可以在外部访问,当然也可以将这些成员声明成Private的。
*缺省状态下,类的成员一律默认为是Private的。
二、父类与子类的成员访问规则:
三、虚函数的概念
声明方式:在函数头前面加上关键字virtual : virtual void FunName(int ,int);
虚函数的引入是为了C++多态 的特性,一般的使用场景为:如果你声明了一个父类的指针指向一个子类的对象,利用该指针进行函数调用,那么,当你调用的函数在父类中声明是虚函数时,C++会采用迟绑定策略(late binding),根据指针指向的具体对象类型判断需要调用那个函数,如果子类中有这个函数,则执行子类的函数定义,如果没有,则执行这个父类的虚函数调用。
虚函数的实现实际上使用了一个虚函数表的概念,这个虚函数表解决了继承和覆盖的问题,一个类如果有虚函数的的时候,在创建一个这个类的对象时,该对象最前面的存储空间位置会维护一个虚函数表,里面存放的是这个类所有的虚函数,存放顺序按照函数声明的先后顺序,而且首先存放父类的虚函数,其次是子类的,除非有覆盖的情况发生。
纯虚函数指的是没有函数实现,只有函数声明的虚函数,声明方式为:
virtual void FunName()=0;
纯虚函数是不能调用的,除非给了他的实现。例如,在父类定义了一个纯虚函数,继承的子类给出了这个函数的实现,那么这个子类的对象就可以调用它,纯虚函数往往用在设计父类时,不确定会不会在以后建立的派生类中用得到某些函数,可以先在父类中给出这个纯虚函数的声明。
另外,当子类去继承父类的虚函数的时候,子类的这个函数同样是一个虚函数,
不管有没有在其前加上virtual关键字。在这种情况下,子类函数会覆盖父类的函数,在虚函数表上的表现就是:在这个子类的对象最开始的存储空间上,子类的虚函数代替了父类的虚函数的位置,这样如果你调用一个子类对象的虚函数,父类的这个函数就不会产生影响。
四,引用
定义一个变量的引用,实际上是给这个变量一个别名定义方式为:
int a=0;
int &b=a;
上面就定义了一个变量a的别名,a和b指向同一个内存空间,改变a的同时也会改变a;引用变量必须在定义时初始化。引用和指针在内存空间上的区别:
引用与指针在使用上的区别在于,是代码更具有逻辑性,例如,我们分别用引用和指针作为参数实现一个操作符“=”的重载函数:
指针版本:ClassName operator =(ClassName * another);
引用版本:ClassName operator =(ClassName & another);
那么在调用的时候,二者的形式分别为:
指针版本: ClassName a;
ClassName b;
a=&b
引用版本: ClassName a;
ClassName b;
a=b;
显然,传递引用更具有逻辑性;二者还具有其他形式的区别,简单表示为:
指针:变量,独立,可变,可空,替身,无类型检查;
引用:别名,依赖,不变,非空,本体,有类型检查;
五,为什么包含自定义的头文件用双引号,包含系统头文件要用尖括号?
二者的主要区别在于搜寻文件路径的起点上面;如果头文件使用双引号包含的,则从该项目(工程)的当前目录下开始查找,如果使用的是尖括号,则从系统目录下开始查找。其实可以统一用双引号,这样的话,会先从当前目录下查找,如果没有找到,则去系统目录下查找。
六、使用命令代码块:
ifndefine abcdefg; //这只是随便定义一个宏,不代表要使用它,与# define
define abcdefg 1; // # define abcdefg;等效
…
endif
在头文件中,来防止头文件被重复包含。
七、VC++程序编译链接原理与过程
孙鑫C++课程笔记2——创建类相关推荐
- 孙鑫老师VC笔记(转)
第一课 1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明. 2.Pr ...
- 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .
第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...
- 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15]
第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...
- 孙鑫VC学习笔记:第七讲
七.对话框 2006年8月5日 14:25 因为笔记是用OneNote做的,上传以后为看不到图片,于是我截图放到相册上面, 相册地址为:http://photo.163.com/photos/good ...
- 孙鑫VC++课程中用到的函数一览
在许多VC教科书中这些函数/方法.结构.宏等比较常见,觉得比较重要,虽然不用记住,但应该知道,所以列举出来,没写出参数和返回值情况,编写程序时还需仔细查看MSDN文档.本人英语水平较差再加上自己的一些 ...
- 孙鑫MFC学习笔记1.Windows应用程序运行机理
1.MSG结构 hwnd:窗口句柄 message:消息类型 wParam & lParam:消息的附加信息(比如键值) time:消息被投递的时间 tip:typedef的作用是从变量类型区 ...
- mfc编程 孙鑫_孙鑫VC++视频教程笔记-(3)MFC程序框架的剖析 附1-SDI程序流程图
1,寻找WinMain人口: 在安装目录下找到MFC文件夹下的SRC文件夹,SRC下是MFC源代码. 路径:MFC|SRC|APPMODUL.CPP: _tWinMain(HINSTANCE hIns ...
- mfc编程 孙鑫_孙鑫MFC学习笔记7:对话框编程(上)
1.DoModal创建模态对话框 2.Create创建非模态对话框(需要用ShowWindow显示出来) 模态:对话框显示,程序会暂停,直到对话框关闭 非模态:对话框显示,程序继续执行 3.对于模态对 ...
- 孙鑫VC++讲座笔记-(6)菜单编程
1,弹出菜单(Pop-up)是不能用来作命令响应的. 2,MFC中菜单项消息如果利用ClassWizard来对菜单项消息分别在上述四个类中进行响应,则菜单消息传递顺序:View类--Doc类--CMa ...
最新文章
- NVL 和NVL2函数
- 磁盘位置_CPT201-磁盘
- 0 有符号和无符号整型数字
- |NOIOJ|动态规划|3532:最大上升子序列和
- 看着女朋友的肚子,以肉眼可见的速度大起来......
- Vim移动光标快捷键汇总
- 81-spark异常总结1
- 【转】斐讯K2刷华硕固件教程
- 2010年通信工程概预算培训讲义
- 分割线怎么搭建css,css怎么设置分割线
- 一句话理解到底什么是电平触发器,脉冲触发器,同步触发器,边沿触发器
- Java setlocale方法_Java Configuration.setLocale方法代碼示例
- 桌面计算机未响应,电脑软件总是未响应 电脑应用程序经常无响应,
- Python 调用高德 API 实现地址转为经纬度
- python中sub的用法_python 正则表达式篇 - sub 用法
- MySQL究竟是如何做到持久性的?
- linux给变量加单引号,grep中加单引号与不加引号的区别
- 非正式第十三届蓝桥杯大赛
- MacOS 打开软件出现 ‘xxx‘ “将对您的电脑造成伤害。 您应该将它移到废纸篓。“的解决方式
- h3c无线管理 dns服务器,H3C FIT AP与AC连接时三种的注册流程