成员函数变量的冲突

Posted zsy12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成员函数变量的冲突相关的知识,希望对你有一定的参考价值。

成员变量的冲突:

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

#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;
}

 

以上是关于成员函数变量的冲突的主要内容,如果未能解决你的问题,请参考以下文章

static作用,静态成员变量和静态成员函数

嵌套类:如何访问封闭类中的成员变量

C++类里成员变量为什么加前缀m_?(避免成员变量与传入参数名称冲突)

C++类里成员变量为什么加前缀m_?(避免成员变量与传入参数名称冲突)

MFC:在工作线程中使用对象的成员函数时出现访问冲突错误

静态数据成员 和 静态成员函数