码迷,mamicode.com
首页 > 其他好文 > 详细

成员函数变量的冲突

时间:2019-05-11 10:54:03      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:覆盖   pac   parent   iostream   name   类的成员   void   作用域   变量   

成员变量的冲突:

当子类和父类出现同名成员时(同名覆盖): 子类成员将隐藏父类的成员,但是父类只是被隐藏,可以通过作用域分辨符( :: )访问父类的同名成员。

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    int value;
};

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

int main()
{
    Child c;   
    c.value = 100;          // 访问子类的value
    c.Parent::value = 100;  // 通过父类名和作用域分辨符访问父类的value   
    return 0;
}

 

成员函数的冲突:

子类继承父类时同名函数是否是重载函数,作用域不同,只是函数同名覆盖。通过作用域分辨符( :: )访问父类同名函数。

子类可以定义和父类中完全相同的同名函数。

 

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    void add(int x)
    {
        std << "parent : add(int x) " << endl;
    } 
    void add(int x, int y)
    {
        std << "parent : add(int x, int y) " << endl
    }
};

class Child : public Parent
{
public:
    void add(int x)  // 和父类中完全相同的函数,作用域不同,合法
    {
        std << "Child : add(int x)" << endl;
    }   
    void add(int x, int y) // 和父类中完全相同的函数,作用域不同,合法
    { 
        std << "Child : add(int x, int y)" << endl;
    }
    void add(int x, int y, int z) // 和父类中函数名相同的函数, 作用域不同,只是覆盖,不是重载
    {
        std << "Child : add(int x, int y, int z)" << endl;
    }
};

int main()
{
    Child c;
    c.add(1);            // Child : add(int x)
    c.add(1,1);          // Child : add(int x, int y)
    c.add(1,1,1);        // Child : add(int x, int y, int z)
    
    c.Parent::add(1);    // parent : add(int x)
    c.Parent::add(1,1);  // parent : add(int x, int y)
    return 0;
}

 

成员函数变量的冲突

标签:覆盖   pac   parent   iostream   name   类的成员   void   作用域   变量   

原文地址:https://www.cnblogs.com/zsy12138/p/10847899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!