Big-Man 发表于 2023-9-4 23:57:56

worker类的头文件,然后工具自动把构造和析构函数生成的,就没有去删掉,为什么后...

#pragma once
#include <string>
using namespace std;
#include<iostream>

class Worker
{
public:
        Worker();
        ~Worker();

        virtual void showInfo() = 0;//显示职工信息
        virtual string getDepName() = 0;//获取职工部门


        int m_id;//职工编号
        string m_name;//职工姓名
        int m_departmentid;//职工所在部门编号

private:

};

Worker::Worker()
{
}

Worker::~Worker()
{
}


#pragma once
#include "worker.h"
using namespace std;
#include <iostream>


class Employ:public Worker
{
public:
        Employ(int id, string name, int depid);

        virtual void showInfo();//显示职工信息
        virtual string getDepName();//获取职工部门

private:

};


我写了一个worker类的头文件,然后工具自动把构造和析构函数生成的,就没有去删掉,为什么后面的Empoly类在继承worker类之后,执行程序会报图中的错,把worker类的析构和构造删掉就没问题,报错的BOSS类Manager类都是和Employ一样的定义方式

isdkz 发表于 2023-9-4 23:58:14

在C++中,当一个类被继承时,派生类会自动调用基类的构造函数和析构函数来初始化和清理基类的成员。在你的代码中,Worker类的构造函数和析构函数被自动生成,并且没有被删除。

当你创建Employ类的实例时,它会自动调用Worker类的构造函数和析构函数。然而,由于Worker类的构造函数和析构函数是纯虚函数(通过"= 0"来声明),这会导致编译错误。

为了解决这个问题,你可以将Worker类的构造函数和析构函数实现为纯虚函数的默认实现,或者提供具体的实现。例如,你可以在Worker类的头文件中添加以下代码:

Worker::Worker() = default;
Worker::~Worker() = default;


这样,Worker类的构造函数和析构函数将有默认的实现,Employ类就可以正常继承和使用了。

Big-Man 发表于 2023-9-5 23:17:37

isdkz 发表于 2023-9-4 23:58
在C++中,当一个类被继承时,派生类会自动调用基类的构造函数和析构函数来初始化和清理基类的成员。在你的 ...

由于Worker类的构造函数和析构函数是纯虚函数(通过"= 0"来声明),这会导致编译错误,这里为什么Worker类的构造和析构时纯虚函数啊,在代码里面这两个函数没有用过 =0 来声明
页: [1]
查看完整版本: worker类的头文件,然后工具自动把构造和析构函数生成的,就没有去删掉,为什么后...