为了账号安全,请及时绑定邮箱和手机立即绑定

哪位大神能帮我看看哪里出现问题了吗?我已经定义子类虚函数了,但还是出现问题

#ifndef PERSON_H
#define PERSON_H

#include<string>
using namespace std;

class Person
{
public:
 Person(string name);
 virtual~Person();
 virtual void worker() = 0;
protected:
 string m_strName;
};
#endif

#include"Person.h"
#include<iostream>
using namespace std;


Person::Person(string name)
{
 m_strName = name;
 cout << "Person()" << endl;
}


Person::~Person()
{
 cout << "~Person()" << endl;
}

#ifndef WORKER_H
#define WORKER_H


#include"Person.h"


class Worker:public Person
{
public:
 Worker(string name,int age);
 virtual~Worker();
 virtual void work();
protected:
 int m_iAge;


};
#endif

#include"Worker.h"
#include<iostream>
using namespace std;


Worker::Worker(string name, int age):Person(name)
{


 m_iAge = age;
 cout << "Worker()" << endl;
}


Worker::~Worker()
{
 cout << "~Worker()" << endl;
}


void Worker::work()
{
 cout << "work()" << endl;
}

#ifndef DUSTMAN_H
#define DUSTMAN_H


#include"Worker.h"


class Dustman:public Worker
{
public:
 Dustman(string name, int age);
 virtual~Dustman();
 virtual void work();


};
#endif

#include"Dustman.h"
#include<iostream>
using namespace std;


Dustman::Dustman(string name, int age):Worker(name,age)
{


 cout << "Dustman()" << endl;
}
Dustman::~Dustman()
{
 cout << "~Dustman()" << endl;
}
void Dustman::work()
{
 cout << "work()" << endl;
}

#include"Dustman.h"
#include"Worker.h"
#include<iostream>
using namespace std;


int main()
{
 Worker worker("zhang", 15);
 return 0;
}

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2259 “Worker”: 不能实例化抽象类 dustman d:\visual studio 2015\projects\dustman\dustman\demo.cpp 8 

严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动)  不允许使用抽象类类型 "Worker" 的对象: dustman d:\Visual Studio 2015\Projects\dustman\dustman\demo.cpp 8 



正在回答

2 回答

你的Worker继承的是一个抽象类,继承后就把派生类也变成抽象类了,解决方法:派生类的void Worker::work()改成void Worker::worker();或者把抽象类的Person的virtual void worker()=0改成virtual void work()=0;就可以解决啦。望采纳!

1 回复 有任何疑惑可以回复我~
#1

_Gui_ 提问者

谢谢,打错字自己都没发现
2017-05-01 回复 有任何疑惑可以回复我~

你继承了一个抽象类的纯虚函数virtual void worker();你的派生类的Worker()函数也应该接上抽象类的virtual void worker();你的派生类没有worker(),只有work(),所以继承过来的worker()把子类也变成抽象类了;

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66236    人
  • 解答问题       314    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

哪位大神能帮我看看哪里出现问题了吗?我已经定义子类虚函数了,但还是出现问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信