C ++继承 - 在子类中运行父方法

时间:2012-10-13 23:31:27

标签: c++ inheritance

我的父类Course使用addStudent(Student s)方法。我的孩子班,BetterCourse,继承自Course。每次我尝试运行BetterCourse.addStudent(s)时,都会出现以下错误:

  

错误:没有匹配的调用函数   'BetterCourse :: addStudent(学生(&)())'注意:候选人是:void课程:: addStudent(学生)

我理解它告诉我addStudent()尚未在BetterCourse中定义,并且它建议我使用父类Course中的一个。这让我感到困惑,因为围绕继承的整个想法不需要重新定义继承的函数和变量。

课程如下:

#include <iostream>
#include <string>
#include "Student.h"

using namespace std;

class Course
{

    protected:
        string id;
        string name;

    public:
        Course();
        Course(string id, string name);     
        void addStudent(Student s);
};

Course::Course()
{
   //code
}

Course::Course(string id, string name)
{
   //code
}

void Course::addStudent(Student s) 
{
   //code
}

BetterCourse:

#include <iostream>
#include <string>
#include "Course.h"

using namespace std;

class BetterCourse : public Course
{
    public:
        BetterCourse(string id, string name) : Course(id,name){};
};

3 个答案:

答案 0 :(得分:4)

从你的错误看来,你第一次看到了C ++中最丑陋的部分。

此:

Student s();

是函数声明 - 不是对象定义。 s类型为Student (*)(),因此当您致电:

BetterCourse bc; 
bc.addStudent(s);

您收到错误 - 您没有方法添加返回Student的函数。

通过以下方式定义学生:

Student s;
Student s {}; // new C++11 way
Student s = Student(); // 

答案 1 :(得分:0)

听起来你实际上正在调用这个函数&#39; addStudent&#39;用不恰当的论点。你能在BetterCourse对象上显示实际调用addStudent的代码吗?听起来你正在使用对学生的引用而不是学生对象本身。

答案 2 :(得分:0)

你不能调用BetterCourse.addStudent(s)你应该创建一个对象

BetterCourse obj;
obj.addStudent(s);

应该有效

如果你想调用BetterCourse :: addStudent(s)而不是将addStudent声明为静态方法