继承名称的掩盖

///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   effect_item33.h
//  Version     :   0.10
//  Author      :   Ryan Han
//  Date        :   2013/07/26 16:50:14
//  Comment     :
//
///////////////////////////////////////////////////////////////////////////////
#ifndef EFFECT_ITEM33_H
#define    EFFECT_ITEM33_H

class base{
public:
    virtual void mf1() = 0;
    virtual void mf1(int);
    virtual void mf2();
    void mf3();
    void mf3(double);
private:
    int x;
};

class derive : public base {
public:
    using base::mf1;
    void mf1();
    void mf4();
private:
    int y;
};

#endif
///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   effect_item33.cpp
//  Version     :   0.10
//  Author      :   Ryan Han
//  Date        :   2013/07/26 16:50:14
//  Comment     :
//
///////////////////////////////////////////////////////////////////////////////
#include "effect_item33.h"

#include <iostream>
using namespace std;

void base::
mf1()
{
    cout << "base::mf1() was called." << endl;
}
void base::
mf1(int)
{
    cout << "base::mf1(int) was called." << endl;
}
void base::
mf2()
{
    cout << "base::mf2() was called." << endl;
}
void base::
mf3()
{
    cout << "base::mf3() was called." << endl;
}
void base::
mf3(double)
{
    cout << "base::mf3(double) was called." << endl;
}
void derive::
mf1()
{
    cout << "derive::mf1() was called." << endl;
}
void derive::
mf4()
{
    cout << "derive::mf4() was called." << endl;
}
///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   effect_item33_client.cpp
//  Version     :   0.10
//  Author      :   Ryan Han
//  Date        :   2013/07/26 16:50:14
//  Comment     :
//    Output        :
//    $ ./a
///////////////////////////////////////////////////////////////////////////////
#include "effect_item33.h"
#include <iostream>
using namespace std;

int main() {
    derive d;
    d.mf1();
    d.mf1(3);
    return 0;
}

继承类中的成员函数将覆盖基类中的同名函数,不论virutal不virtual,和参数是否相同,基类中的函数一律不再可见。

继承名称的掩盖

时间: 2024-08-03 04:02:32

继承名称的掩盖的相关文章

一些要注意的地方

1.尽量以const,enum,inline替换define. 2.旧式的编译器可能不允许static在其申明式上获得初值.此外所谓的'in-class'初值设定也许只针对整数常量进行,要是你的编译器不支持上述语法,可以将初值放在定义式.要是数组无法初始化时可以考虑使用类中的枚举值. 3.如果成员变量是const或者reference一定要用初值发初始化而不要使用赋值法. 4.构造函数最好使用成员初始化列表而不要在构造函数体内使用赋值操作,成员初始化列表列出的值应该与他们在class中的申明次序

《Effective C++》第8章 定制new和delete-读书笔记

章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 条款49:了解new-handler的行为 当operator new无法满足某一内存分配需求时,它会抛出异常,当其抛出异常以反应一个未获满足的内存需求之前,会先调用一个客户指定的错误处理函数,一个所谓的new-handler.为了指定这个“用以处理内存不足”的函数,客户必须调用set_new_handler. namespace std { typedef void (*new_handler)(); new_ha

Effective C++ 条款 52:写了placement new也要写placement delete

(一) 当我们写下了下面这个语句: Widget* pw = new Widget; 这个时候,共有两个函数被调用:一个分配内存的operator new,另外一个是Widget的default构造函数. 假设第一个调用成功,第二个却抛出异常.步骤一所分配内存必须取消并恢复旧观,否则会造成内存泄漏.这时,客户没能力归还内存,因为Widget构造函数抛出异常,pw尚未被赋值,客户手上也就没有指针指向该被归还的内存. 这个时候,取消步骤一,并恢复旧观的责任就落到C++运行系统身上. 运行期系统会高兴

《Effective C++》:条款32-条款33

条款32确定你的public继承塑模出is-a关系 条款33避免遮掩继承而来的名称 条款32-条款40是介绍继承相关内容的. 条款32介绍public继承塑造出基类和派生类之间的关系. 条款33介绍继承层次中,变量的作用域以及遮掩关系. 条款32:确定你的public继承塑模出is-a关系 以C++面向对象编程,最重要一个规则是:public inheritance(公开继承)意味着"is-a"(是一种)的关系.在这里是"直译",例如class D: public

第2章 URL与资源

1.URL是通过描述资源的位置来标识资源的,而URN则是通过名字来标识资源的,与它们当前所处位置无关. 2.URL的语法: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> 2.1.scheme:访问服务器要使用的协议 2.2.user,password:若用户没有提供,会插入一个默认的用户名和密码.用

用 GStreamer 简化 Linux 多媒体开发

一.基本概念 GStreamer 作为 GNOME 桌面环境推荐的流媒体应用框架,采用了基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(component), 并且在需要的时候能够很方便地安装到任意一个管道上,由于所有插件都通过管道机制进行统一的数据交换,因此很容易利用已有的各种插件"组装"出一个功能完善的多媒体应用程序. 1.1 元件处理 对于需要应用 GStreamer 框架的程序员来讲,GstElement 是一个必须

Oracle 错误总结及问题解决 ORA

参考地址 ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常.ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册

《Effective C++》学习笔记——条款33

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 六.继承与面向对象设计 Inheritance and Object-Oriented Design 条款33 : 避免遮掩继承而来的名称 rule 33 : Avoid hiding inherited names 1.关于名称,无关于继承,而关于和作用域有关

GStreamer 简化 Linux 多媒体开发

Streamer 是 GNOME 桌面环境下用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3.Ogg.MPEG1.MPEG2.AVI.Quicktime 等多种格式的多媒体数据. 1简介编辑 GStreamer是一个开源的多媒体框架库.利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理. 应用程序可以透明的利用解码和过滤技术.开发者可以使用简洁通用的接口来编