一个类定义了与其继承的类同名同类型的成员,为什么不会报错?

问题描述 投票:0回答:1

我目前正在大学学习编程,我正在闲逛并编写了这段代码,我很好奇

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
类中获取?

c++ class object inheritance
1个回答
0
投票

您必须限定您实际想要使用的名称。非限定名称是来自实际类型的名称。观察:

#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
变量。当然,地址也一样。

© www.soinside.com 2019 - 2024. All rights reserved.