成员函数变量的冲突
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; }
以上是关于成员函数变量的冲突的主要内容,如果未能解决你的问题,请参考以下文章
C++类里成员变量为什么加前缀m_?(避免成员变量与传入参数名称冲突)