C++中判断成员函数是否重写

C++中判断成员函数是否重写

判断一个成员函数是不是虚函数(重写),有两个三个条件:

  1. 两个成员函数各自在基类和派生类中定义;
  2. 基类中定义的成员函数必须带有关键字virtual,派生类的成员函数可带可不带。
  3. 这两个成员函数原型(函数名,函数参数,函数返回类型)必须相同。

注意:如果这两个函数的返回类型分别为基类和派生类,返回值为指向基类和派生类的指针或引用,则也构成重写。此返回类型称为协变。

调用这些成员函数时,使用对象指针,这样当指针指向不同的对象时,就可以调用不同类的成员函数。

下面给一个程序分析:

#include<iostream>
using namespace std;

class Grandam
{
public:
  virtual void introduce_self()
  {
    cout << "I am grandam." << endl;
  }
};

class Mother:public Grandam
{
public:
  void introdude_self()
  {
    cout << "I am mother." << endl;
  }
};

class Daughter :public Mother
{
public:
  void introduce_self()
  {
    cout << "I am daughter." << endl;
  }
};

int main()
{
  Grandam* ptr;
  Grandam g;
  Mother m;
  Daughter d;
  ptr = &g;
  ptr->introduce_self();

  ptr = &m;
  ptr->introduce_self();

  ptr = &d;
  ptr->introduce_self();
  return 0;
}

结果如图所示:

从结果可知,每次都执行了成员函数的虚函数introduce_self()版本,解决了继承来的二义性问题。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-04-04

python利用dir函数查看类中所有成员函数示例代码

前言 如果一个类是别人编写的,又没有帮助文档,怎么样来查看所有成员函数呢?本文详细给大家介绍了关于python用dir函数查看类中所有成员函数的相关内容,下面话不多说了,来一起看看详细的介绍吧. 可以使用下面的代码: # File: builtin-dir-example-2.py class A: def a(self): pass def b(self): pass class B(A): def c(self): pass def d(self): pass def getmembers(

JavaScript中判断原生函数检查function是否是原生代码

我总是经常碰到需要检查某个function是否是原生代码的情况 -- 这是功能测试中一个很重要的内容: 函数是浏览器内置支持的,还是通过第三方类库模拟的.要检测这一点,最简单的办法当然是判断函数的 toString 方法返回的值啦. JavaScript代码 判断函数是否是原生方法其实相当简单: // 判断是否原生函数 function isNative(fn) { // 示例: // alert.toString() // "function alert() { [native code] }

PHP中如何判断exec函数执行成功?

前言 做一个代码发布的系统,需要用到PHP的exec函数来执行Linux下的命令和git,svn命令,如何判断PHP的exec函数是否执行成功呢? 解决方案 写个PHP文件来做实验: exec函数第一个参数是执行的命令,第二个参数是执行的结果,第三个参数是执行的状态. <?php exec('ls', $log, $status); print_r($log); print_r($status); echo PHP_EOL; 执行这个php文件: 这里$log,$status输出结果如图. 但是

简要介绍C++编程中的友元函数和友元类

一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来补充介绍一个例外--友元(friend). fnend 的意思是朋友,或者说是好友,与好友的关系显然要比一般人亲密一些.有的家庭可能会这样处理:客厅对所有来客开放,而卧室除了本家庭的成员可以进人以外,还允许好朋友进入.在C++中,这种关系以关键宇 friend 声明,中文多译为友元.友元可以访问与其有好友关系的类

详解C++编程中的虚函数

我们知道,在同一类中是不能定义两个名字相同.参数个数和类型都相同的函数的,否则就是"重复定义".但是在类的继承层次结构中,在不同的层次中可以出现名字相同.参数个数和类型都相同而功能不同的函数. 人们提出这样的设想,能否用同一个调用形式,既能调用派生类又能调用基类的同名函数.在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针调用它们.例如,用同一个语句"pt->display( );"可以调用不同派生层次中的display函数,只需在调用前

C++ 中const对象与const成员函数的实例详解

C++ 中const对象与const成员函数的实例详解 const对象只能调用const成员函数: #include<iostream> using namespace std; class A { public: void fun()const { cout<<"const 成员函数!"<<endl; } void fun() { cout<<"非const成员函数 !"<<endl; } }; int

js中判断变量类型函数typeof的用法总结

1.作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串. 可能的字符串有:"number"."string"."boolean"."object"."function" 和 "undefined". 2.常用返回值说明 表达式 返回值 typeof undefined 'undefined' typeof null 'object' typeof true 'boole

C++中与输入相关的istream类成员函数简介

eof 函数 eof是end of file的缩写,表示"文件结束".从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(真),否则为0(假). [例] 逐个读入一行字符,将其中的非空格字符输出. #include <iostream> using namespace std; int main( ) { char c; while(!cin.eof( )) //eof( )为假表示未遇到文件结束符 if((c=cin.get( ))!=' ') //

C++中Operator类型强制转换成员函数解析

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2