浅谈C++继承中的名字查找
实例如下:
#include<iostream> #include<string> using namespace std; class Base { public: void func() { cout << "func() in Base." << endl; } void func(int a) { cout << "func(int a) in Base." << endl; } void func(string s) { cout << "func(string s) in Base." << endl; } }; class Derived : public Base { public: //using Base::func; void print() { cout << "func() in Derived." << endl; } }; int main() { Derived d; d.Base::func();//指定基类版本 d.func(); d.func(12);//error,可在派生类中添加using Base::print; d.func("abc");//error,可在派生类中添加using Base::print; system("pause"); return 0; } //一个对象,引用,指针的静态类型决定了该对象哪些成员可见。 //派生类作用域嵌套在基类作用域中 //派生类成员将屏蔽同名的基类成员 //如果派生类想通过自身类型使用的基类中重载版本,则派生类必须要么覆盖所有重载版本,要么一个也不覆盖。 //利用using声明可把基类中的所有重载版本都添加到派生类作用域中 //名字查找先于类型检查,如果在派生类中找到了调用的函数名,则不会继续向上查找,接着进行类型检查
以上这篇浅谈C++继承中的名字查找就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
C++ MD5的源码实例详解
C++ MD5源码: md5.h: #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Type define */ typedef unsigned char byte; typedef unsigned int uint32; using std::string; using std::ifstream; /* MD5 declaration. */ class MD5 { public: MD
-
C/C++中提高查找速度的小技巧
前言 当看到题目是在一个数组中查找某一个元素,或是在一个字符串中查找某个字符,我们一般都会写出如下代码.但这样的代码虽然简洁明了,但在数组元素很多的情况下,并不是一个很好的解决方案,今天我就来分享一个提高查找速度的小技巧. //在一个int数组中查找某个元素 int find(int A[],int n,int element) { for( int i = 0; i < n; i++ ) { if( A[i] == element ) return i; } return -1; } //在一
-
有关C++继承与友元、继承与类型转换详解
实例如下: #include <iostream> using namespace std; class a{ friend class pal; private: int i; protected: int j; public: int k; }; class b:public a{ protected: int l; }; class c:protected a{}; class d:private a{}; class e:public b{}; class pal{ public: v
-
简单谈谈关于C++中大随机数的问题
前言 大家都知道C++的随机数最大值是RAND_MAX,在头文件<stdlib.h>中定义.在windows平台下的VS是0x7fff,在MacBook的XCode是int的最大值.看来不同的平台是不同的.但是windows的是在太小了. 先上一个平时的随机函数: int littleRand(int min, int max) { //考虑到不同平台下RAND_MAX可能不等于0x7fff,所以不能把RAND_MAX*RAND_MAX,以免int爆掉 if (min > max) {
-
浅谈C++左值引用和右值引用
实例如下: #include<iostream> #include<utility> #include<vector> using namespace std; int f(); int main() { vector<int>vi(100); int i=42; int &&r1=i;//error不能把右值引用绑到左值上 int &&r2=10; int &r3=i; int &r4=10;//error非
-
c++图像处理:24位真彩图颜色变换实例
实例如下: #include<iostream> #include<Windows.h> using namespace std; bool isred(BYTE r,BYTE g,byte b){ if(r>g&&r>b) return true; else return false; } void red2green(BYTE& r,BYTE& g,BYTE& b){ BYTE tmp=r; r=g; g=tmp; } int
-
有关C++中随机函数rand() 和srand() 的用法详解
一.rand() 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: stdlib.h 函数说明 : rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定 的范围里可看成是随机的. rand()返回一随机数值的范围在0至RAND_MAX 间.RAND_MAX的范围最少是在32767之间(int).用 unsigned int 双字节是65535,四字节是4294967295的整数范围.0~RAND
-
C++ 处理中文符号实例详解
C++ 处理中文符号 英文符号替换为英文逗号 processPunctuation(string& tag) { std::set<char> punctuation_set; punctuation_set.insert(' '); punctuation_set.insert('\t'); punctuation_set.insert(';'); for (int i=0; i< tag.size(); i++) { if (punctuation_set.find(tag[
-
C++如何实现简单的计时器详解
实现分析 首先我们先分析一下计时器的一些功能,简单一点的计时器包括开始.暂停.停止和显示基本功能,这些功能以C++面向对象的编程思想(OOP)进行抽象,就是计时器类(Timer)的4个成员函数,当然我们要把这些函数作为公有的,因为它们是留给外部的接口(interface). 然后我们再分析一下计时器的三种状态:停止,正在运行,暂停(注意:暂停不是停止),那么怎么记录计时器的三种状态呢? 这里我们用布尔类型的变量记录计时器的三种状态,分别为bool is_pause,bool is_stop,在这
-
C++中求余运算符(%)示例详解
介绍: %是求余运算符,也叫模除运算符,用于求余数. %要求两个操作数均为整数(或可以隐式转换成整数的类型). 标准规定: 如果%左边的操作数为负数时,则模除的结果为负数或者0, 如果%左边的操作数为正数时,则模除的结构为正数或者0. 示例代码: #include<iostream> using namespace std; int main(){ char c = 253; int i =5 ; cout<<c%2<<endl; cout<<i%c<
-
C++数据结构之实现循环顺序队列
数据结构–用C++实现循环顺序队列 队列的操作特性:先进先出 队列中元素具有相同类型 相邻元素具有前驱和后继关系 设置队头.队尾两个指针,以改进出队的时间性能 约定:队头指针front指向队头元素的前一个位置,队尾指针rear指向队尾元素 为了解决假溢出,我们将存储队列的数组头尾相接,从而产生了循环队列. 如何判断循环队列队空? 队空:front=rear 如何盘对循环队列堆满? 队满:front=rear 那么问题就来了,队空和队满的判断条件相同,为了避免队满时产生队空的判断或者相反,我们需要
-
深入理解C++中的文件操作
前言 我们在编写程序的时候,最密不可分的就是对文件进行相应的操作,我们可以从文件中读取数据,可以将数据保存到文件,可以-- 总而言之,言而总之,一言以蔽之,对文件的操作是非常重要的,下面我们就来介绍一下C++中是如何对文件进行操作的.C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来) 打
随机推荐
- Hbuilder配置Avalon和Vue指令提示的方法详解
- 文本框输入限制 [大全]
- Vue.js鼠标悬浮更换图片功能
- Ajax在线提交留言并实时显示的js代码[修正版]
- 浅谈JAVA 异常对于性能的影响
- 关于MySQL数据迁移--data目录直接替换注意事项的详解
- docker python api 安装配置的详解
- AJAX开发简略 (第二部分)
- js获取select选中的option的text示例代码
- javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍)
- 关于SQL 存储过程入门基础(基础知识)
- Apache的fork模式和worker模式判断方法
- Android事件分发机制(上) ViewGroup的事件分发
- struts2的国际化实现网站整体中英文切换实例代码
- Android仿淘宝切换商品列表布局效果的示例代码
- 形形色色的交换机
- 利用python将xml文件解析成html文件的实现方法
- Android优化方案之Fragment的懒加载实现代码
- 浅谈webpack打包过程中因为图片的路径导致的问题
- ajax动态加载json数据并详细解析