标签:覆盖 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