VC++深入详解--掌握c++
来源:互联网 发布:手机闪存测试软件 编辑:程序博客网 时间:2024/06/05 18:19
(1)关于函数的重载、覆盖、隐藏:
重载的条件:函数的参数类型、参数个数不同,才能构成重载。
覆盖的条件:基类函数必须是虚函数(有virtual关键字);发生覆盖的两个函数要分别位于派生类和基类中;函数名称、参数列表都必须完全相同。
隐藏的条件:派生类中函数与基类函数同名(不管参数列表是否相同)。
注意:只有函数的返回值类型不同不能构成重载;当函数带有默认参数事要注意是否构成重载;重载是在同一个类中出现的。
在子类中如果对基类虚函数有覆盖,无论该覆盖是否有virtual关键字,子类中的这个函数都是虚函数。
在子类中如果对基类虚函数有隐藏,子类中的这个函数是不是虚函数由子类中的这个函数自己决定,而不管基类是否为虚函数。
简单的判断方法:函数的覆盖发生在派生类与基类之间,两个函数必须完全相同,并且都是虚函数。不属于这种情况的就是隐藏。
(2)多个头文件的问题
当出现多个头文件时容易出现重复包含,利用条件预处理指令可以解决:
注意:通常将类的定义、类成员函数的声明放在头文件.h中;将类中成员函数的实现放到源文件.cpp中。
animal.h
#ifndef ANIMAL_H_H //此处用条件预处理指令解决重复包含头文件的问题。当编译器编译1.cpp文件,在这个文件中包含了animal.h和fish.h两个头文件, //知道animal这个类定义了,接着展开fish.h头文件,而fish.h头文件中也包含了animal.h,再次展开animal.h,于是animal这个类#define ANIMAL_H_H //就重复定义了。class animal{public:animal();~animal();void eat();void sleep();virtual void breathe();};#endif
animal.cpp
#include"animal.h"//<>是不会搜索当前目录的,所以要用""。#include<iostream.h>//using namespace std;animal::animal(){}animal::~animal(){}void animal::eat(){cout<<"eat!!!"<<endl;}void animal::sleep(){cout<<"sleep!!!"<<endl;}void animal::breathe()//在animal.h头文件中已经加了virtual,在.cpp源文件中则不需再加virtual。{cout<<"breathe!!!"<<endl;}
fish.h
#include"animal.h" //fish类从animal继承而来,要让编译器知道animal是一种类的类型,就要包含animal.h头文件。#ifndef FISH_H_H#define FISH_H_Hclass fish:public animal{public:void breathe();};#endif
fish.cpp
#include"fish.h"#include<iostream.h>//using namespace std;void fish::breathe(){cout<<"bubble!!!"<<endl;}
1.cpp
#include"animal.h"#include"fish.h"//#include<iostream.h>//using namespace std;void hhh(animal *pAn){pAn->breathe();//通过基类来实现动态绑定}int main(){animal *pAn;fish fishhhh;pAn = &fishhhh;//c++是强类型语言,对类型检查严格。但是这里并没有违背,因为fish对象也是一个animal对象,将fish转换为animal类型//不用强制类型转换,c++编译器会自动进行这种转换。反过来不能把animal对象看成时fish对象。hhh(pAn);//pAn->breathe();//可以不调用函数hhh(),直接用此句来完成多态的效果。return 0;}
通过Rebuild All可以看到,产生可执行程序经历了两个步骤:
1.编译器对三个.cpp源文件进行了单独编译(Compiling...)。编译时,由预处理器对预处理指令(#include、#define、#if)进行处理,在内存中输出翻译单元。编译器接受预处理器的输出,将源代码转换成包含机器语言指令的.obj目标文件。在编译过程中,头文件不参与编译。
2.链接器将目标文件和用到的c++类库文件一起链接生成1.exe(Linking...)。
- VC++深入详解--掌握c++
- 《VC++深入详解》学习笔记 第二章 掌握C++
- 《VC++深入详解》读书笔记——2.掌握C++
- lesson2:掌握c++基本语法(vc++深入详解)
- VC++深入详解笔记——2.掌握C++基本语法
- 《vc++深入详解》读书笔记
- 看《深入详解VC++》
- 学VC++深入详解
- VC++深入详解第一章
- vc++深入详解笔记
- VC++深入详解20101215
- vc++深入详解
- VC++ 深入详解 第一章
- 《VC++深入详解》笔记
- vc++深入详解 1
- vc++ 深入详解 2
- VC++深入详解
- 《vc++深入详解》读书笔记之一
- (挑战编程_3_2)Where's Waldorf?
- 学习android这些天,学会反编译后顿时伤心了
- 初涉数据库之使用数据
- A*算法学习笔记
- MSP430F149的DS18B20C语言程序
- VC++深入详解--掌握c++
- (挑战编程_3_3)Common Permutation
- CodeIgniter 核心代码阅读-入口文件index.php
- 常用Linux系统信息查看命令
- 2013-5-30
- POJ 3261 Milk Patterns(后缀数组)
- The Eclipse Color Theme Plugin http://eclipsecolorthemes.org/
- 五、 作业
- Tomcat version