首页 > 其他 > 详细

第四十七课、父子间的冲突

时间:2017-02-05 16:29:53      阅读:104      评论:0      收藏:0      [点我收藏+]

一、父子间的冲突

1、子类可以定义父类中的同名成员变量

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

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

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

技术分享

#include<iostream>

using namespace std;

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 = 1000;//访问子类的
    c.Parent::mi = 100;//通过作用域分辨符来访问父类中的同名成员变量
    
    cout << endl;

    cout <<"&c.mi=" << &c.mi << endl;
    cout << "c.mi=" << c.mi << endl;

    cout << endl;

    cout << "&c.Parent::mi=" << &c.Parent::mi << endl;
    cout << "c.Parent::mi=" << c.Parent::mi << endl;
    return 0;
}

//输出结果
/*
&Parent.mi=0xbff768d8  //注意是先调用的是父类的构造函数
&Child.mi=0xbff768dc

&c.mi=0xbff768dc
c.mi=1000

&c.Parent::mi=0xbff768d8
c.Parent::mi=100
*/

 

二、再论重载

1、类中的成员函数可以重载

(1)、重载函数的本质为多个不同的函数

(2)、函数名参数列表是唯一的标识

(3)、函数重载必须发生在同一作用域中

2、父子间的同名函数

(1)、子类中的函数将隐藏父类中的函数

(2)、子类无法重载父类中的成员函数

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

(4)、子类可以定义父类中完全相同的函数

#include<iostream>

using namespace std;

class Parent
{
public:
    int mi;
    void add(int v)
    {
        mi += v;
    }

    void add(int x, int y)
    {
        mi += (x + y);
    }
};

class Child : public Parent
{
public:
    int mi;
    void add(int v)
    {
        mi += v;
    }

    void add(int x, int y, int z)
    {
        mi += (x + y + z);
    }

};
int main()
{
    Child c;
    c.mi = 1000;
    c.Parent::mi = 100;
    
    cout << "c.mi = " << c.mi << endl;
    cout << "c.Parent::mi = " << c.Parent::mi << endl;

    c.add(1);
    c.Parent::add(1);
    cout << "c.mi = " << c.mi << endl;
    cout << "c.Parent::mi = " << c.Parent::mi << endl;

//    c.add(1, 2);//子类没有这个函数,会编译出错,   子类中只要有一个函数与父类中的函数同名(同名即可),父类中所有同名的函数都会被隐藏起来
    c.Parent::add(1, 2);
    cout << "c.Parent::mi = " << c.Parent::mi << endl;
    return 0;
}

//输出结果
/*
c.mi = 1000
c.Parent::mi = 100
c.mi = 1001
c.Parent::mi = 101
c.Parent::mi = 104
*/

 

三、小结

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

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

3、子类和父类中的函数不能构成重载关系

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

5、使用作用域分辨符访问父类中的同名成员

 

第四十七课、父子间的冲突

原文:http://www.cnblogs.com/gui-lin/p/6367760.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!