C++学习记录-面向对象-同名成员的处理

一、

当子类和父类存在同名的成员(属性,方法等)时,直接访问会默认访问子类自己的成员,想要访问继承自父类的成员则要加作用域

  • 子类对象可以直接访问子类的同名成员
  • 子类对象加作用域可以访问到继承自父类的同名成员
  • 子类和父类有同名的函数,子类会隐藏父类的同名函数,加作用域可以访问到

二、

示例:

创建一个类

1
2
3
4
5
6
7
8
9
10
11
12
13
class chara {

public:
string name = "角色";
string weapon = "新手武器";

public:
void printinfo(int a)
{
cout << name << endl;
cout << weapon << endl;
}
};

创建一个类继承自chara

1
2
3
4
5
6
7
8
9
10
11
12
13
class qyn :public chara {

public:
string name = "琪亚娜";
string weapon = "天火圣裁";

public:
void printinfo()
{
cout << name << endl;
cout << weapon << endl;
}
};

实例化两个类:

1
2
chara p1;
qyn p2;

测试开始:

1
2
cout << p2.name << endl;
cout << p2.weapon << endl;

运行结果(访问的是子类自己的成员):

琪亚娜
天火圣裁

1
2
cout << p2.chara::name << endl;
cout << p2.chara::weapon<< endl;

运行结果(访问的是子类中继承自父类的成员):

角色
新手武器

1
2
p2.printinfo(10);
//错误,因为父类中的同名函数已经被隐藏
1
2
p2.chara::printinfo(10);
//正确