Effective C++ .33 子类的名称覆盖

#include <iostream>
#include <cstdlib>

using namespace std;

class Base {
    public:
        int add(int a, int b) {
            return a + b;
        }
};

class Derived : public Base {
    public:
        using Base::add;
        int add(int a, int b, int c) {
            return a + b + c;
        }
};

int main() {

    Derived d;
    cout<<d.add(1, 2)<<endl;
    return 0;
}

如果不在Derived中加入using命令,那么在main中就不能调用两个参数的add

时间: 2024-10-08 04:43:01

Effective C++ .33 子类的名称覆盖的相关文章

父类中的方法被覆盖以及子类调用父类覆盖的方法

覆盖 override 覆盖是指在有继承关系的类中,子类中实现了与基类同名的方法,在子类的实例调用该方法时,实际调用的是 子类中的覆盖版本,这种现象叫做覆盖 调用super 函数的两个方法: 1.super(cls, obj) 返回绑定超类的实例(要求obj必须是cls类型的实例) 2.super() 返回绑定超类的实例,等同于: super(__class__, 实例方法的第一个参数), 必须在方法内调用 作用: 可以用super() 返回的实例间接调用其父类的覆盖方法 class A: de

Effective C++ 33 避免遮掩继承而来的名称

首先介绍一个原则LSP(Liskov Substitution Principle),如果Class D以Public方式继承Class B,则所有B对象可以派上用场的任何地方,D对象一样可以派上用场. 对于重载和重写,相信大家都已经有所了解.这里讨论一下在public继承的时候,重载函数的问题. 先看下面的例子: 1 class Base 2 { 3 public: 4 virtual void mf1() = 0; 5 virtual void mf1(int); 6 virtual voi

C++ 继承体系中的名称覆盖

首先一个简单的样例: int x; int f() { double x; cin >> x; return x; } 在上述代码中.函数f的局部变量x掩盖了全局变量x.这得从 "C++的名字查找机制"说起,首先.在函数f的局部作用域中查找.(甚至是语句块).假设不存在,到上一层的作用域再进行查找,... 该命名空间中查找,最后是全局作用域. 在类的继承体系中,名字覆盖问题也是非常困扰的.此处的"名字"但是是函数名,变量名,typedef, enum都能

Python3基础 super层层调用父类的__init__方法 子类的__init__覆盖了父类的__init__的解决方法

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ex1: code: class Parent : def __init__(self) : #父类的构造函数 print("父类构造完毕") class Child1(Parent) : #child类继承于 parent类 def __init__(self) : print(

Java基础之子类父类属性覆盖

当java的子类和父类具有相同名字的属性时,到底java是怎么处理的. 先看代码: package com.joyfulmath.study.field; public class Person { public String name; public String getName() { return name; } } package com.joyfulmath.study.field; public class Student extends Person { public String

抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.

public abstract class AUser { public abstract UserInfo getUser(); public virtual void Save(UserInfo info) { //实现保存的功能 } } public class UserSqlServer:AUser { public override UserInfo getUser() { //一定要实现的,抽象类只给了抽象方法 } //假设抽象类针对SqlServer实现的功能,这里不需要实现了.

c# 序列化XML文件时,子类的名称命名

[XmlRoot(ElementName = "product")] public class WMS_Query_ProductInfo { public string skuCode { get; set; } public float normalQuantity { get; set; } public float defectiveQuantity { get; set; } public float averageWeight { get; set; } public in

java中子类覆盖父类方法所必须满足的条件

一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为private类型的,那么子类则无法继承,也无法覆盖. 2.子类和父类的方法必须是实例方法,如果父类是static方法而子类是实例方法,或者相反都会报错. 如果父类和子类都是static方法,那么子类隐藏父类的方法,而不是重写父类方法. 3.子类和父类的方法必须要具有相同的函数名称.参数列表,并且子类的

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent