Я смущен различиями между переопределением и переопределением функций в производных классах.Переопределение по сравнению с переопределением в C++
Я знаю, что - в C++ переопределенные функции статически связаны, а переопределенные функции динамически связаны и что виртуальная функция переопределяется, а не виртуальная функция переопределяется.
Когда производный класс «переопределяет» метод в базовом классе, его рассмотренное переопределение. Но когда производный класс виртуальный, он больше не переопределяет, а скорее переопределяет. Поэтому я понимаю логистику правил, но я не понимаю сути.
В приведенном ниже примере функция SetScore переопределяется. Однако, если я сделаю функцию setScore в базовом классе виртуальной (добавив к ней слово virtual), setScore в производном классе будет переопределен. Я не понимаю итоговый результат - в чем разница. в setScore?
Базовый класс:
class GradedActivity
{
protected:
char letter; // To hold the letter grade
double score; // To hold the numeric score
void determineGrade(); // Determines the letter grade
public:
// Default constructor
GradedActivity()
{ letter = ' '; score = 0.0; }
// Mutator function
void setScore(double s)
{ score = s;
determineGrade();}
// Accessor functions
double getScore() const
{ return score; }
char getLetterGrade() const
{ return letter; }
};
Производный класс:
class CurvedActivity : public GradedActivity
{
protected:
double rawScore; // Unadjusted score
double percentage; // Curve percentage
public:
// Default constructor
CurvedActivity() : GradedActivity()
{ rawScore = 0.0; percentage = 0.0; }
// Mutator functions
void setScore(double s)
{ rawScore = s;
GradedActivity::setScore(rawScore * percentage); }
void setPercentage(double c)
{ percentage = c; }
// Accessor funtions
double getPercentage() const
{ return percentage; }
double getRawScore() const
{ return rawScore; }
};
Это главное:
// Define a CurvedActivity object.
CurvedActivity exam;
...
// Send the values to the exam object.
exam.setPercentage(percentage);
exam.setScore(numericScore);
Переопределение облегчает классовый полиморфизм. Перегрузка облегчает функциональный полиморфизм. Переопределение не делает и не является ошибкой. – orfdorf