gpt4 book ai didi

c++ - 设计问题——静态变量继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:19 24 4
gpt4 key购买 nike

我有以下层次结构:

Graduate.cpp  (abstract)
College.cpp (abstract)
Ecollege.cpp
University.cpp (abstract)
Tuniversity.cpp
Huniversity.cpp

例如,class Huniversity 表示从 H 大学毕业的学生。每个非抽象类都必须实现以下在 Graduate.h 中定义的方法:

    virtual double CalcGraduateAvg() = 0;

Tuniversity 有来自 Huniversity 的使用信息。此信息存储在静态变量中。这是例如 Tuniversity header 和实现:

#include "University.h"
#define AVG_FACTOR 5

class Tuniversity : public University {
public:
Tuniversity(int id, char identifier, double salary, double grades);
virtual double CalcGraduateAvg();

protected:
static int _numTGrads;
static double _sumTGrades;
};

#include "Tuniversity.h"
#include "Huniversity.h"

//initialize static variables:
int Tuniversity::_numTGrads = 0;
double Tuniversity::_sumTGrades = 0;

Tuniversity::Tuniversity(int id, char identifier, double salary, double grades)
: University(id,identifier, salary, grades) {

_numTGrads++;
_sumTGrades += grades;
}

double Tuniversity::CalcGraduateAvg() {

//HERE I CAN'T access sumHGrades and numHGrades since it's private
double A = Huniversity::_sumHGrades / Huniversity::_numHGrads;
double T = _sumTGrades / _numTGrads;
_normalizedGradesAvg = A / T * _gradesAvg + AVG_FACTOR;
return _normalizedGradesAvg;

我的设计问题是 Tuniv' 如何从 Huniv'(两个静态变量)读取数据。除了两个类(class)都继承大学这一事实之外,它们之间没有任何联系。我不想公开这些变量,因为它是错误的。我不想创建一个非静态虚函数 GetAvg() 因为它会迫使我创建和对象以获取数据。我试图制作虚拟静态功能,但这是不可能的。你认为这个问题有好的解决方案吗(我宁愿不实现一个静态的Tuni' 和 Huniv 中的函数 GetAvg() 将返回数据,因为如果我扩展我的程序,例如添加 Muniv' 没有接口(interface)强制类实现 GetAvg() 函数,所以我认为该选项是一个糟糕的设计).据我所知,这个问题没有好的解决方案。在每个类中使用 2 个静态变量是我的练习要求,在我要求我的助教更改该要求之前,我希望与您协商。

谢谢大家!

最佳答案

class Huniversity for example represents a student that graduated from H university

那么为什么称这个类为 Huniversity 而不是 Hstudent 呢?

我认为您将大学和学生混合在一起,并将它们放在同一个类(class)中(因为在您所说的代表学生的类(class)中,您还有代表每所大学信息的静态成员)。大学可以包含一个(指向)学生对象的 vector ,其中每个学生对象都包含其成绩。

我会为学生引入单独的类,并使学生人数和成绩总和的静态成员成为非静态成员,并添加方法 GetAvg()

关于c++ - 设计问题——静态变量继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692633/

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