[英]C++ printing with Diamond of death
首先讓我解釋一下我的等級:
Person
/ \
Student Employee
\ /
Intern
每個類都有自己的output
函數,它打印其數據成員,我只需打印一次Person
。 問題是Student
和Employee
不是抽象類,人們也會創建一個類型的對象,所以我不僅可以在Intern
級別調用輸出函數。
正如您將在下面的代碼中看到的那樣,我已經設法解決了這個問題,但我認為這很難看並且不是非常多態的。 我已經創建了一個額外的輸出函數,因此它適用於所有情況。 有沒有更好的方法來實現這一目標?
class Person {
string name;
int id;
public:
virtual void output(ostream& out) {
out << name << "," << id;
}
}
學生:
class Student : virtual public Person {
string major;
int year;
public:
virtual void output(ostream& out) {
Person::output(out);
out << "," << major << "," << year;
}
virtual void outputStudOnly(ostream& out) {
out << "," << major << "," << year;
}
};
雇員:
class Employee : virtual public Person{
string jobTitle;
public:
virtual void output(ostream& out) {
Person::output(out);
out << "," << jobTitle;
}
virtual void outputEmpOnly(ostream& out) {
out << "," << jobTitle;
}
};
實習生:
class Intern : public Student, public Employee {
public:
virtual void output(ostream& out) {
Person::output(out);
Student::outputStudOnly(out);
Employee::outputEmpOnly(out);
}
};
那是什么模板方法。 以下是我將如何編寫此代碼:
class Person {
string name;
int id;
public:
void output(ostream& out) {
out << name << "," << id;
output_impl(out);
}
private:
virtual void output_impl(ostream& ) {}
};
class Student : virtual public Person {
string major;
int year;
private:
virtual void output_impl(ostream& out) {
out << "," << major << "," << year;
}
};
class Employee : virtual public Person {
string jobTitle;
private:
virtual void output_impl(ostream& out) {
out << "," << jobTitle;
}
};
class Intern : public Student, public Employee {
private:
virtual void output_impl(ostream& out) {
Student::output_impl(out);
Employee::output_impl(out);
}
};
而且你在對象上調用output
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.