亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

哪位大神能幫我看看哪里出現問題了嗎?我已經定義子類虛函數了,但還是出現問題

#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++遠征之多態篇
  • 參與學習       66224    人
  • 解答問題       334    個

本教程將帶領大家體會面向對象三大特性中的多態特性

進入課程

哪位大神能幫我看看哪里出現問題了嗎?我已經定義子類虛函數了,但還是出現問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號