#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;class R//祖先类
{
private:int r;
public:R(int x = 0):r(x){}void f(){cout << " r = " << r << endl;}void print(){cout << "print R = " << r << endl;}
};
//虚继承
class A : virtual  public R
{
private:int a;
public:A(int x,int y):R(x),a(y){}//重写父类的f()函数void f(){cout << "a = " << a << endl;R::f();//r是私有成员变量,不能直接访问,通过作用域进行访问被派生类覆盖的函数f()}
};
//虚继承
class B : virtual  public R
{
private:int b;
public:B(int x, int y) :R(x), b(y) {}//重写父类的f()函数void f(){cout << "b = " << b << endl;R::f();//r是私有成员变量,不能直接访问,通过作用域进行访问被派生类覆盖的函数f()}
};
class C :public A, public B
{
private: int c;
public:C(int x,int y,int z,int m):R(x),A(x,y),B(x,z),c(m){  }void f(){cout << "c = " << c << endl;A::f();//此时A里面有一个  r  的输出,和输出aB::f();//B里面也有一个r的输出,和输出b//从而导致重复调用,两次输出 r }};
int main()
{C cc(1212, 345, 123, 45);cc.f();system("pause");return 0;
}

//解决办法:针对重复调用,每个类把属于自己的工作单独封装

#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;class R//祖先类
{
private:int r;
public:R(int x = 0):r(x){}void f(){  cout << " r = " << r << endl;        }virtual void print(){  cout << "print R = " << r << endl;}
};
//虚继承
class A : virtual  public R//virtual写在public的前后均可以
{
private:int a;
public:A(int x,int y):R(x),a(y){  }protected:void fA()//增加一个保护函数,只打印自己的扩展成员{cout << "a = " << a << endl;}void f()//重写父类的f()函数{//cout << "a = " << a << endl;fA();R::f();//r是私有成员变量,不能直接访问,通过作用域进行访问被派生类覆盖的函数f()}
};
//虚继承
class B : virtual  public R
{
private:int b;
public:B(int x, int y) :R(x), b(y) {}protected:void fB()//增加一个保护函数,只打印自己的扩展成员{cout << "b = " << b << endl;}void f()//重写父类的f()函数{fB();R::f();//r是私有成员变量,不能直接访问,通过作用域进行访问被派生类覆盖的函数f()}
};
class C :public A, public B
{
private: int c;
public:C(int x,int y,int z,int m):R(x),A(x,y),B(x,z),c(m){  }void f(){cout << "c = " << c << endl;R::f();//A::f();//此时A里面有一个  r  的输出,和输出a//B::f();//B里面也有一个r的输出,和输出b//从而导致重复调用,两次输出 r fA();//A::fA();fB();//A::fB();}};
int main()
{C cc(1212, 345, 123, 45);cc.f();system("pause");return 0;
}

C++之多重继承引发的重复调用相关推荐

  1. python重复执行函数_Python threading 单线程 timer重复调用函数

    项目中需要使用定时器,每次都使用构造器函数调用: timer = threading.Timer(timerFlag, upload_position) timer.start() 打印线程后发现,每 ...

  2. 【FLink】Flink SQL代码生成与UDF重复调用的优化

    1.概述 转载:Flink SQL代码生成与UDF重复调用的优化 2. 代码生成简介 代码生成(code generation)是当今各种数据库和数据处理引擎广泛采用的物理执行层技术之一.通过代码生成 ...

  3. Unity延迟和重复调用方法

    延迟调用方法 Invoke(arg1,arg2) arg1 是延迟调用的字符串方法名,arg2是延迟多少时间调用arg1 方法. 重复调用方法 InvokeRepeating(arg1,arg2,ar ...

  4. java 多线程 数据重复,java 多线程 出现数据重复调用有关问题

    java 多线程 出现数据重复调用问题 线程操作过程描述: 1.线程查询数据库表(table1)数据,并遍历修改记录状态(防止出现数据重复调用).(此操作加入了同步锁) 2.调用接口,获取返回的状态. ...

  5. VUE中created被重复调用(每次进入页面之后都会调用created)

    项目中部分页面是正常会缓存的 重复调用created的那个页面没有被缓存 设置不被缓存是通过设置 meta: { keepAlive: false} 项目中router中压根没有设置 后来对比有缓存和 ...

  6. python 装饰器实践,实现定时函数和失败异常重复调用

    python 装饰器实践,实现定时函数和失败异常重复调用 执行请求或函数,出现异常情况下指定重复执行次数 可以作为一个包调用 方法 get()和post 做请求,execcunt = 指定请求失败再次 ...

  7. 微信支付重复调用解决方案

    微信支付重复调用 今天调用微信支付的时候发现了一个问题,支付成功了,但是微信一直在不停的回调我的回调地址,导致原本应该充值1元的业务逻辑执行了七八遍. 再仔细看一下微信的官方文档 微信官方文档明确说明 ...

  8. Unity定时重复调用方法--Invoke方法

    Unity定时/重复调用方法_Invoke方法 本篇讲述如何在unity中定定时调用其他方法的Invoke方法, 通过这个方法可以实现更多定时功能. (一)先来介绍本篇用到的两个方法: (1)Invo ...

  9. post 防篡改_安全|API接口安全性设计(防篡改和重复调用)

    API接口的安全性主要是为了保证数据不会被篡改和重复调用,实现方案主要围绕Token.时间戳和Sign三个机制展开设计. 1. Token授权机制 用户使用用户名密码登录后服务器给客户端返回一个Tok ...

最新文章

  1. 案例精解企业网络构建读书笔记之网络故障排除案例
  2. hdu 3416(最短路+最大流)
  3. [设计模式笔记]3.单例模式
  4. linux 文件系统 代码,Linux文件系统介绍
  5. 字段 新增hive_Hive分区表 | 每日五分钟学大数据
  6. 密码机项目安装软件时候出现的问题以及对应的解决办法
  7. basic认证 接口 php,PHP 模拟 HTTP 基本认证(Basic Authentication) - 黄棣-dee - 博客园...
  8. leetcode python3 简单题155. Min Stack
  9. oracle 11g 静默安装
  10. 支持macOS Big Sur 11系统 mac系统维护优化OnyX 3.9.1中文版
  11. vbs计算机病毒代码,vbs病毒的简单例子源代码解析
  12. 大众点评字体解密(最新)2020/4/17
  13. 抖音java解析_Java版抖音解析接口
  14. 51开发板用ADC采集模拟量
  15. 所谓资本寒冬,不过是一厢情愿的破灭
  16. 图像处理之3d算法----2d转3d算法介绍
  17. 盘点世界上奇怪的 6 种编程语言
  18. 《神经科学:探索脑》学习笔记(第13章 运动的脊髓控制)
  19. 崔辰州:“数据驱动的天文科普”人生
  20. 最新聚合官方个人免签支付系统源码+服务器打包

热门文章

  1. nginx加密,访问接口认证
  2. 正向代理服务器和反向代理服务器的区别
  3. HDU Senior's Gun (水题)
  4. 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
  5. Linux内核中工作队列的使用work_struct,delayed_work
  6. ESP8266烧写时的各种参数设置
  7. 设计模式总结 (2)创建型模式
  8. 波卡链Substrate (6)Babe协议三“slot leader”
  9. Bech32编码 (1)产生背景
  10. 深度学习的数学 (3)基础函数