【发布时间】:2013-03-22 00:04:34
【问题描述】:
// Shadowing
#include <iostream>
using namespace std;
const int MNAME = 30;
const int M = 13;
class Person { // Base Class
char person[MNAME+1];
public:
void set(const char* n);
void display(ostream&) const;
protected:
const char* name() const;
};
void Person::set(const char* n) {
strncpy(person, n, MNAME);
person[MNAME] = '\0';
}
void Person::display(ostream& os) const {
os << person << ' ';
}
const char* Person::name() const { return person; }
class Student : public Person { // Derived
int no;
char grade[M+1];
public:
Student();
Student(int, const char*);
void display(ostream&) const;
};
Student::Student() {
no = 0;
grade[0] = '\0';
}
Student::Student(int n, const char* g) {
// see p.61 for validation logic
no = n;
strcpy(grade, g);
}
void Student::display(ostream& os) const {
os << name() << ' '
<< no << << ' ' << grade << endl;
}
int main() {
Person person;
Student student(975, "ABBAD");
student.set("Harry");
student.display(cout); // Harry 975 ABBAD
person.set("Jane Doe");
person.display(cout); // Jane Doe
}
第一次调用 display()(在学生上)调用学生版本的 展示()。第二次调用 display() (on person) 调用 Person display() 的版本。 display() 的派生版本遮蔽了 学生对象的基础版本。基本版本在 人对象。
我不明白什么是阴影。我意识到这两个类都定义了相同的显示函数,显然如果你调用 student.display 和 person.display 它会相应地调用它们。那么这是什么意思:
display() 的派生版本在 学生对象。基本版本在 person 对象上执行。
我不懂阴影。
来源:https://scs.senecac.on.ca/~btp200/pages/content/dfunc.html 继承 - 派生类的函数
【问题讨论】:
-
想象一下你想在student上调用person版本。
标签: c++