基类和派生类之间的同名函数处理方式

基类和派生类之间的同名函数处理方式

class A
{
public:
    void fn()
    {}  

    void fn(int a)
    {}
};  

class B : public A
{
public:
    void fn()
    {}
};  

int main()
{
    B b;
    b.fn(3);  // 编译失败,编译器会报怨,B中,并不存在fn(int)的函数)。
    return 0;
}  

  这里涉及到一个C++中的重要的知识点。即:同名函数的重载动作,只发生在自由函数(即非成员),及同一个class/struct内部的函数之间。而不能跨越基类和派生类。当派生类写一个和基类同名(无论参数列表相同或不相同)的函数时,此时发生的动作叫“覆盖”。覆盖的意思,就是基类的同名函数,在派生类内,将变得无法直接调用(但可以间接调用)。

参考:

1、https://blog.csdn.net/jinvmen/article/details/48311445

原文地址:https://www.cnblogs.com/tekkaman/p/10323148.html

时间: 2024-08-05 13:19:46

基类和派生类之间的同名函数处理方式的相关文章

C++:基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量. 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量.这种不同类型之间的自动转换,称为赋值兼容.在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来代替.因为,通过公有继承,除了构造函数和析构函数外,派生类保留了基类其他的所有的成员.那么,派生类就具有基类的全部功能,凡

c++基类与派生类之间的转换

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class Box 5 { 6 public: 7 void setWidth(double width){ 8 this->width=width; 9 } 10 void setHieght(double height){ 11 this->height=height; 12 } 13 void getWidth(){ 14 cout

关于基类和派生类之间的关系

作为面向对象的程序设计来说,继承是非常重要的一个特点,面向对象程序设计(Object-Oriented Programming, OOP)的核心思想是数据抽象.继承和动态绑定.其中使用数据抽象,我们可以将类的接口与实现分离:使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象.下面什么主要介绍的是继承中基类和派生类之间的关系. 在基类中有两种类型的成员是我们需要注意的,一种是基类希望派生类继承的:一种是基类希望派生类覆盖的

C++基类和派生类之间的转换

本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. 1 #include<iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 A(int m1, int n1):m(m1), n(n1){} 8 void display(); 9 private: 10 int m; 11 int n; 12 }; 13 14 void A::display() 15 { 16 cout <&

C++中的基类和派生类

转载自:http://www.cnblogs.com/sujz/archive/2011/05/12/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方

【转载】C++中的基类与派生类

转自:http://www.cnblogs.com/sujz/articles/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方式,基类的privat

C++中的基类与派生类

派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的成员被派生类继承后,保持原来的状态 private 基类的public和protected的成员被派生类继承后,变成派生类的private成员 protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继承方式,基类的private成员都不能被派生类访问.从上面的表中可以看出,声明为public的方法和属性可以被随意访问:声明为pro

详解C++中基类与派生类的转换以及虚基类

很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生

C++ Primer 学习笔记_66_面向对象编程 --定义基类和派生类[续]

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim