我目前正在大学学习编程,我正在闲逛并编写了这段代码,我很好奇
class Student{
public:
string name;
string address;
};
class Instructor:public Student {
public:
string name;
string address;
};
int main() {
Instructor Z;
Z.name = "Zombie";
cout << Z.name;
return 0;
}
C++ 不应该返回错误吗,因为其中一个继承的两个类都包含具有相同名称(名称)的相同数据类型(字符串)?另外,当我们委托
Z.name = "Zombie";
时,该对象是从 Student
类还是 Instructor
类中获取?
您必须限定您实际想要使用的名称。非限定名称是来自实际类型的名称。观察:
#include <iostream>
#include <string>
class Student{
public:
std::string name{"empty"};
std::string address{"empty"};
};
class Instructor:public Student {
public:
std::string name{"empty"};
std::string address{"empty"};
};
int main() {
Instructor Z;
std::cout << Z.name << "\n";
std::cout << Z.Student::name << "\n\n";
Z.name = "Zombie";
std::cout << Z.name << "\n";
std::cout << Z.Student::name << "\n\n";
Student& S=Z;
std::cout << S.name << "\n";
S.name="Student";
std::cout << S.name << "\n\n";
std::cout << Z.name << "\n";
std::cout << Z.Student::name << "\n\n";
}
stieber@gatekeeper:~ $ g++ Test.cpp && ./a.out
empty
empty
Zombie
empty
empty
Student
Zombie
Student
因此,只有两个不同的
name
变量。当然,地址也一样。