我们都知道可以使用using关键字引入命名空间,例如:using namespace std;

using还有个作用是在子类中引入父类成员函数。

1) 当子类没有定义和父类同名的函数(virtual也一样)时,子类是可以直接调用父类的函数的:

 #include <iostream>
#include <cstring>
using namespace std; class CBase
{
public:
void print() { cout << "Base::print()" << endl; }
}; class CChild : public CBase
{
public:
}; int main()
{
CChild child;
child.print();
return ;
}

输出

 Base::print()

2) 当子类定义了和父类同名的函数时,子类是调用自己的函数,子类的函数隐藏了父类的函数:

 #include <iostream>
#include <cstring>
using namespace std; class CBase
{
public:
void print() { cout << "Base::print()" << endl; }
}; class CChild : public CBase
{
public:
void print() { cout << "CChild::print()" << endl; }
}; int main()
{
CChild child;
child.print();
return ;
}

输出

 CChild::print()

3) 即使函数签名(函数的名称及其参数类型组合)不一样,也会隐藏父类的函数:

 #include <iostream>
#include <cstring>
using namespace std; class CBase
{
public:
void print() { cout << "Base::print()" << endl; }
}; class CChild : public CBase
{
public:
void print(int a) { cout << "CChild::print()" << endl; }
}; int main()
{
CChild child;
child.print();
return ;
}

输出

 test.cpp: In function ?.nt main()?.
test.cpp::: error: no matching function for call to ?.Child::print()?
test.cpp::: note: candidate is:
test.cpp::: note: void CChild::print(int)
test.cpp::: note: candidate expects argument, provided

4)如果需要对子类对象使用父类的函数,就需要在子类中使用using引入父类成员函数:

 #include <iostream>
#include <cstring>
using namespace std; class CBase
{
public:
void print() { cout << "Base::print()" << endl; }
}; class CChild : public CBase
{
public:
using CBase::print;
void print(int a) { cout << "CChild::print()" << endl; }
}; int main()
{
CChild child;
child.print();
return ;
}

输出

 Base::print()

using 关键字的作用的更多相关文章

  1. return 关键字的作用

    注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值.(除了返回值类型是void以外) return 关键字的作用: 1. 返回数据给函数的调用者. 2. ...

  2. Linq中关键字的作用及用法

    Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...

  3. Java对象表示方式1:序列化、反序列化和transient关键字的作用

    平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...

  4. C#里partial关键字的作用(转摘)

    C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...

  5. 序列化、反序列化和transient关键字的作用

    引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口, ...

  6. Java关键字及其作用

    Java关键字及其作用 一. 关键字总览 访问控制 private protected public             类,方法和变量修饰符 abstract class extends fin ...

  7. Android(java)学习笔记83:finally关键字的作用

    package cn.itcast_07; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...

  8. Java并发编程学习笔记 深入理解volatile关键字的作用

    引言:以前只是看过介绍volatile的文章,对其的理解也只是停留在理论的层面上,由于最近在项目当中用到了关于并发方面的技术,所以下定决心深入研究一下java并发方面的知识.网上关于volatile的 ...

  9. 【Java学习笔记之一】java关键字及作用

    Java关键字及其作用 一. 总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements ...

  10. java中final 关键字的作用

    final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...

随机推荐

  1. ibufds原语

    低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术,从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差 ...

  2. linux下find命令的使用和总结

    背景:find命令十分的好用,特别是在查找文件的时候,这个时候需要和文件通配符一起使用. 1 前言 我们为什么要学会使用find命令? 每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆 ...

  3. Node.js修改全局安装默认路径

    因为苦于C盘不够的烦恼,不想把全局安装包的路径弄在C盘,于是有了这篇文章: 查看设置 npm config ls //查看设定信息,,找到prefix一行,默认是一般是在C盘 修改命令如下 npm c ...

  4. BZOJ3784树上的路径

    题目描述 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距离从大到小排序, ...

  5. 初识 go 语言:语法

    目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...

  6. vue实战记录(五)- vue实现购物车功能之商品总金额计算和单选全选删除功能

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(五) GitHub:sue ...

  7. java远程文件操作

    有时在项目中,会有专门的文件服务器(windows),这个时候我们需要对文件进行操作时,就不能像操作本地文件那样操作文件服务器的文件.这时候就可以用SmbFile来操作了. 首先添加jar包,mave ...

  8. vmware(1):vmware中的bridge、nat、host-only的区别

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式) bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就 ...

  9. C# 数独算法——LINQ+委托

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sing ...

  10. utf8的大小写敏感性测试及其修改方法

    utf8的大小写敏感性测试及其修改方法 # 测试utf8的大小写敏感性及其修改方法 -- 以下是utf8不区分大小写 # 修改数据库: ALTER DATABASE database_name CHA ...