gpt4 book ai didi

c++ - 重载 >> 继承类的运算符

转载 作者:行者123 更新时间:2023-11-30 03:49:16 29 4
gpt4 key购买 nike

我将如何进行这项工作?教授指导我们使用私有(private)变量。我是否必须设置新变量以在 Student 构造函数中输入 Person 的私有(private)成员?使这项工作最有效的方法是什么?

提前谢谢你。

class Person
{
friend istream& operator>>(istream&, Person&);
friend ostream& operator<<(ostream&, Person&);
private:
char* m_name;
int m_age;
string m_ssn;
public:
Person() = default;
Person(char*, int, const string&);
Person(const Person&);
~Person();
void setName(char*);
char* getName();
void setAge(int);
int getAge();
void setSSN(string);
string getSSN();
Person& operator=(const Person&);
};

// ...

class Student : public Person
{
friend istream& operator>>(istream&, Student&);
friend ostream& operator<<(ostream&, Student&);
private:
float m_gpa;
public:
Student() = default;
Student(char*, int, const string&, float);
Student(const Student&);
void setGPA(float);
float getGPA();
Student& operator=(const Student&);
};

istream& operator>>(istream &is, Student &iStudent)
{
// ?

return is;
}

最佳答案

  1. 实现 operator>>operator<<使用基类。
  2. 使用virtual重定向实现的成员函数。
class Person
{
friend std::istream& operator>>(std::istream&, Person&);
friend std::ostream& operator<<(std::ostream&, Person&);

....

public:

virtual std::istream& read(std::istream&) { ... }
virtual std::ostream& write(std::ostream&) const { ... }

...
};

std::istream& operator>>(std::istream &is, Person& person)
{
return persone.read(is);
}

std::stream& operator<<(std::ostream &os, Person const& person)
{
return persone.write(os);
}

class Student : public Person
{
...

public:

virtual std::istream& read(std::istream&) { ... }
virtual std::ostream& write(std::ostream&) const { ... }

...
};

关于c++ - 重载 >> 继承类的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674640/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com