如何从派生类函数调用父类函数?
如何使用C ++从派生类调用父函数? 例如,我有一个名为parent
的类,以及一个称为child
的类,该类是从parent派生的。 每个类中都有一个print
功能。 在定义孩子的打印功能时,我想调用父母的打印功能。 我将如何去做呢?
#1楼
struct a{int x;struct son{a* _parent;void test(){_parent->x=1; //success}}_son;}_a;int main(){_a._son._parent=&_a;_a._son.test();
}
参考示例。
#2楼
如果基类成员函数的访问修饰符是受保护的或公共的,则可以从派生类中调用基类的成员函数。 可以从派生成员函数调用基类的非虚拟成员和虚拟成员函数。 请参考程序。
#include<iostream>
using namespace std;class Parent
{protected:virtual void fun(int i){cout<<"Parent::fun functionality write here"<<endl;}void fun1(int i){cout<<"Parent::fun1 functionality write here"<<endl;}void fun2(){cout<<"Parent::fun3 functionality write here"<<endl;}};class Child:public Parent
{public:virtual void fun(int i){cout<<"Child::fun partial functionality write here"<<endl;Parent::fun(++i);Parent::fun2();}void fun1(int i){cout<<"Child::fun1 partial functionality write here"<<endl;Parent::fun1(++i);}};
int main()
{Child d1;d1.fun(1);d1.fun1(2);return 0;
}
输出:
$ g++ base_function_call_from_derived.cpp
$ ./a.out
Child::fun partial functionality write here
Parent::fun functionality write here
Parent::fun3 functionality write here
Child::fun1 partial functionality write here
Parent::fun1 functionality write here
#3楼
给定名为Parent
父类和名为Child
子类,您可以执行以下操作:
class Parent {
public:virtual void print(int x);
}class Child : public Parent {void print(int x) override;
}void Parent::print(int x) {// some default behavior
}void Child::print(int x) {// use Parent's print method; implicitly passes 'this' to Parent::printParent::print(x);
}
请注意, Parent
是类的实际名称,而不是关键字。
#4楼
如果您的基类称为Base
,而您的函数称为FooBar()
,则可以使用Base::FooBar()
直接调用它
void Base::FooBar()
{printf("in Base\n");
}void ChildOfBase::FooBar()
{Base::FooBar();
}
#5楼
我冒着明显的危险:调用该函数,如果它在基类中定义,则该函数在派生类中自动可用(除非它是private
)。
如果派生类中有一个具有相同签名的函数,则可以通过添加基类的名称以及两个冒号base_class::foo(...)
来消除歧义。 你应该注意到,不像Java和C#,C ++ 不具备“基础类”(关键字super
或base
,因为C ++的支持), 多重继承 ,这可能导致歧义。
class left {
public:void foo();
};class right {
public:void foo();
};class bottom : public left, public right {
public:void foo(){//base::foo();// ambiguousleft::foo();right::foo();// and when foo() is not called for 'this':bottom b;b.left::foo(); // calls b.foo() from 'left'b.right::foo(); // call b.foo() from 'right'}
};
顺便说一句,您不能两次直接从同一个类派生,因为将无法在另一个基础类上引用一个基础类。
class bottom : public left, public left { // Illegal
};
#6楼
使用父范围解析运算符调用父方法。
父类:: method()
class Primate {
public:void whatAmI(){cout << "I am of Primate order";}
};class Human : public Primate{
public:void whatAmI(){cout << "I am of Human species";}void whatIsMyOrder(){Primate::whatAmI(); // <-- SCOPE RESOLUTION OPERATOR}
};
#7楼
在MSVC中,有一个针对此的Microsoft特定关键字: __super
MSDN:允许您明确声明正在为要重写的功能调用基类实现。
// deriv_super.cpp
// compile with: /c
struct B1 {void mf(int) {}
};struct B2 {void mf(short) {}void mf(char) {}
};struct D : B1, B2 {void mf(short) {__super::mf(1); // Calls B1::mf(int)__super::mf('s'); // Calls B2::mf(char)}
};
如何从派生类函数调用父类函数?相关推荐
- c语言 调用父类方法,关于C++:如何从派生类函数调用父类函数?
如何调用C++派生类中的父函数?例如,我有一个名为parent的类,还有一个名为child的类,它是从父类派生的.内每个类都有一个print函数.在定义孩子的打印函数时,我想调用家长的打印函数.我该怎 ...
- C++(6)——子类调用父类函数实现
C++(6)--子类调用父类函数实现 在C++中子类对象调用父类函数可通过域操作符(::)来实现,表明所调用函数的作用域. #include<iostream>using namespac ...
- python子类如何调用父类方法_python中子类调用父类函数的方法示例
前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...
- 子类super调用父类函数,该函数中调用的函数是父类还子类呢
如图所示: 子类对象通过super()函数调用父类的run函数,然后直接调用了子类的demo函数,而没有调用父类的函数:猜想通过super调用父类,但self仍然代表是子类本身: 再看一例: 从这里说 ...
- python 类函数调用外部函数_python类中调用外部函数,python 函数中 定义类
Q1:python函数里的数组如何在函数外调用出来 使用返回值的方法有两种: 可以直接把调用的函数作为变量使用 可以用调用函数给一个变量赋值 第一种情况见如下例子: l = [1,2,3,4,5] d ...
- JavaScript中子类调用父类方法的实现
一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...
- C++基础之子类调用父类方法
结果: 和 结果 效果一样,想要说明一下三点: 1. vs里成员函数的函数体就算只有一条语句也要加花括号,如第7-9行 2. 25行想通过子类调用父类函数fun(int i),通过B1.A::fun( ...
- 基类指针调用派生类函数_C++ 多态性:虚函数--基类与派生类类型转换(第7章 05)例子问题解析(学习笔记:第8章 05)...
虚函数[1] 问题:还记得第7章的例子吗[2]? 例7-3 类型转换规则举例 #include <iostream> using namespace std; class Base1 { ...
- 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数...
上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的":"后面,比如: class Line : public Object // ...
最新文章
- 2. Add Two Numbers(Leetcode)
- html div百分比计算,css计算元素百分比大小
- win更改文件默认打开方式
- JS中的showModelDialog详解和实例
- java关于map用来筛选的用法
- atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc 艾提拉总结 attilax总结 1.1. 修改此java文件,让他启动编译,还是不能生成了新的class,	1 1.2. 查
- 360linux如何卸载,卸载360安全卫士方法
- starway(NOIP模拟测试24)
- dm数据库 linux版下载,达梦(DM)数据库Linux部署安装
- 产品读书《用户力:需求驱动的产品、运营与商业模式》
- 曲线解决问题。HTTP ERROR 403 No valid crumb was included in the request【重装到带CSRF 的版本】
- GC.SuppressFinalize()的正确用法
- 基于IIC和SPI协议的OLED显示(STM32)
- 1054 : 滑动解锁 hihocoder 蓝桥2017模拟
- Task3 | HLM | 高收入个体更吝啬吗
- dwz php 联动,PHP利用DWZ.CN服务生成短网址
- CCCC 天梯赛 PTA ZOJ 题目 L1 L2 L3
- 关于报错问题:Canvas: trying to draw too large(180633600bytes) bitmap
- 2.BJDCTF(2020第二届)——Misc杂项题
- RAM Sequential