【C++】47父子间的冲突

多姑娘
• 阅读 70

思考

子类中是否可以定义父类中的同名成员?

47-1例:

#include <iostream>
#include <string>

using namespace std;

class Parent
{
 public:
    int mi;
};

class Child : public Parent
{
    public:
    int mi;
};

int main()
{
    Child c;   
    c.mi = 100;    // mi 究竟是子类自定义的,还是从父类继承得到的?
    return 0;
}

父子间的冲突

子类可以定义父类中的同名成员

子类中成员将隐藏父类中的同名成员

父类中的同名成员依然存在于子类中

通过作用域分辨符(::)访问父类中的同名成员

47-2例:

#include <iostream>

#include <string>
using namespace std;
namespace A
{
    int g_i = 0;
}
namespace B
{
    int g_i = 0;
}
class Parent
{
 public:
    int mi;
    Parent()
    {
       cout<<"Parent:"<<"&mi"<<&mi<<endl;
    }
};

class Child : public Parent
{
 public:
    int mi;
    Child()
    {
       cout<<"Child:"<<"&mi"<<&mi<<endl;

    }

};
int main()
{
   Child c;
    c.mi = 100;    // mi 究竟是子类自定义的,还是从父类继承得到的?
    c.Parent::mi = 1000;
    cout << "&c.mi = "<<&c.mi<<endl;
    cout << "c.mi = "<<c.mi<<endl;
     cout << "&c.Parent::mi = "<<&c.Parent::mi<<endl;
     cout << "c.Parent::mi = "<<c.Parent::mi<<endl;

    return 0;

}

输出:

Parent:&mi0xbfed2d68
Child:&mi0xbfed2d6c
&c.mi = 0xbfed2d6c
c.mi = 100
&c.Parent::mi = 0xbfed2d68
c.Parent::mi = 1000

重载

类中的成员函数可以进行重载

1.重载函数的本质为多个不同的函数

2.函数名和参数列表是唯一的标识

3.函数重载必须发生在同一个作用域中

父子间的函数重载
47-3.cpp

#include <iostream>

#include <string>



using namespace std;

namespace A

{

    int g_i = 0;

}

namespace B

{

    int g_i = 0;

}

class Parent

{

 public:

    int mi;
    int add(int v)
    {
        mi += v;
    }
    void add(int a,int b)
    {
        mi += (a+b);
    }

};

class Child : public Parent
{
 public:
     int mi;
     void add(int x,int y,int z)
     {
        mi += (x+y+z);
     }
};
int main()
{
    Child c;
    c.mi = 100;    // mi 究竟是子类自定义的,还是从父类继承得到的?
    c.Parent::mi = 1000;
    cout << "c.mi = "<<c.mi<<endl;
    cout << "c.Parent::mi = "<<c.Parent::mi<<endl;
    c.Parent::add(1);
    c.Parent::add(2,3);
    c.add(4,5,6);
     cout << "c.mi = "<<c.mi<<endl;
    cout << "c.Parent::mi = "<<c.Parent::mi<<endl;
    return 0;
}

输出结果:

c.mi = 100
c.Parent::mi = 1000
c.mi = 115
c.Parent::mi = 1006

子类中定义的函数是不能重载父类中的同名函数的;

子类中的函数将隐藏父类的同名函数

子类无法重载父类中的成员函数

使用作用域分辨符访问父类中的同名函数

子类可以定义父类中完全相同的成员函数

【C++】47父子间的冲突

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
科林-Colin 科林-Colin
4年前
Vue 组件通信方式及其应用场景总结
前言相信实际项目中用过vue的同学,一定对vue中父子组件之间的通信并不陌生,vue中采用良好的数据通讯方式,避免组件通信带来的困扰。今天笔者和大家一起分享vue父子组件之间的通信方式,优缺点,及其实际工作中的应用场景首先我们带着这些问题去思考1vue中到底有多少种父子组件通信方式?2vue中那种父子组件最佳通信方式是什么?3
Stella981 Stella981
3年前
BeanDefinition 合并
BeanDefinition的合并1.BeanDefinition有父子关系,有个属性叫parentName,通过parentName可以设置BeanDefinition的父子关系2.为什么要设置BeanDefinition的父子关系,因为子类可以继承父类的属性,抽出共性,跟java的继承有点像3.Be
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Python3中的super()函数详解
关于Python3中的super()函数我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法,那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名()下面是一个例子:
Stella981 Stella981
3年前
Javascript中,实现类与继承的方法和优缺点分析
Javascript是一种弱类型语言,不存在类的概念,但在js中可以模仿类似于JAVA中的类,实现类与继承第一种方法:利用Javascript中的原型链1//首先定义一个父类23functionAnimal(name,age){4//定义父类的属性5thi
Wesley13 Wesley13
3年前
C++中类中范围解析运算符::和点运算符(.)
C 类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。让我们看看定义的类Box,现在我们要使用成员函数来访问类的成员,而不是直接访问这些类的成员:classBox{public:double
Wesley13 Wesley13
3年前
Java面向对象浅谈
1\.方法重写override:参数列表必须完全与被重写方法的相同;返回类型必须完全与被重写方法的返回类型相同;访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。父类的成员方法只能被它的子类重写。声明
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(