C++ 无法在类之间建立多态性,在新运算符处出现错误
我正在写一个大学管理系统,我一共有十个类。我们知道,当我们在基类中使用虚函数时,我们在类之间建立了多模态,然后我们从基类继承派生类,虚函数在派生类中被重写,但在这里我面临一个我从未遇到过的问题在C++中已经实现了多态性很多,但是现在它在我写这个语句时出错,错误在新的关键字中。C++ 无法在类之间建立多态性,在新运算符处出现错误,c++,oop,inheritance,polymorphism,C++,Oop,Inheritance,Polymorphism,我正在写一个大学管理系统,我一共有十个类。我们知道,当我们在基类中使用虚函数时,我们在类之间建立了多模态,然后我们从基类继承派生类,虚函数在派生类中被重写,但在这里我面临一个我从未遇到过的问题在C++中已经实现了多态性很多,但是现在它在我写这个语句时出错,错误在新的关键字中。 //Using Polymorphism Department* department=new Faculties(); 我无法建立这些部门和faculties类之间的多态性。类似地,有一个employee类是
//Using Polymorphism
Department* department=new Faculties();
我无法建立这些部门和faculties类之间的多态性。类似地,有一个employee类是从department派生的,同样的错误是,我非常困惑,因为我仍然是OOP中的乞丐。
系级
#pragma once
#include"Accounts.h"
#include"Faculties.h"
#include"Employee.h"
#include<iostream>
#include<vector>
using namespace std;
#include<string>
class Department
{
public:
Department()=default;
~Department()=default;
//Declaring the methods
//Setters
void setDepartmentID(int);
void setDepartmentStrength(int);
void setHODName(string);
//Inheriting
virtual void setName(string);
virtual void set_id(int);
virtual void set_address(string);
virtual void setEmail(string);
//Defining getters
virtual string getName(int);
virtual int get_id(int);
virtual string get_address(int);
virtual string getEmail(int);
//for calculating payments
virtual void set_payments(float, string, float)=0;
virtual void showPaymentDetails(int);
//getters
int getDepartmentStrength();
private:
vector<string> departmentName;
vector<string> departmentHOD;
vector<int> departmentID;
vector<int> departmentStrength;
//Declaring an array to enter the department faculties
};
Department::Department()
{
}
Department::~Department()
{
}
void Department::setDepartmentID(int id)
{
departmentID.push_back(id);
}
void Department::setName(string name)
{
departmentName.push_back(name);
}
void Department::setDepartmentStrength(int strength)
{
departmentStrength.push_back(strength);
}
void Department::setHODName(string name)
{
departmentHOD.push_back(name);
}
int Department::getDepartmentStrength()
{
static int sum = 0;
for (size_t i = 0; i < departmentStrength.size(); i++)
{
sum = sum + departmentStrength[i];
}
return sum;
}
#pragma一次
#包括“Accounts.h”
#包括“Faculties.h”
#包括“Employee.h”
#包括
#包括
使用名称空间std;
#包括
班级部
{
公众:
Department()=默认值;
~Department()=默认值;
//声明方法
//二传手
void setDepartmentID(int);
void setDepartmentStrength(int);
void setHODName(字符串);
//继承
虚拟空集合名(字符串);
虚空集_id(int);
虚拟无效集合地址(字符串);
虚拟邮件(字符串);
//定义吸气剂
虚拟字符串getName(int);
虚拟int获取_id(int);
虚拟字符串get_地址(int);
虚拟字符串getEmail(int);
//用于计算付款
虚拟无效集_付款(浮动、字符串、浮动)=0;
虚拟void showPaymentDetails(int);
//吸气剂
int getDepartmentStrength();
私人:
矢量部门名称;
病媒科方法;
向量部门ID;
向量部门强度;
//声明一个数组以输入系教师
};
部门::部门()
{
}
部门::~部门()
{
}
作废部门::setDepartmentID(内部id)
{
部门id。推回(id);
}
作废部门::设置名称(字符串名称)
{
部门名称。推回(名称);
}
无效部门::设置部门强度(内部强度)
{
部门力量。推回(力量);
}
作废部门::setHODName(字符串名称)
{
部门方法推回(姓名);
}
内部部门::getDepartmentStrength()
{
静态整数和=0;
对于(size_t i=0;i
院系班级
#pragma once
#include"Accounts.h"
#include"Department.h"
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Faculties:public Department
{
public:
Faculties()=default;
~Faculties()=default;
//////////////////////////////////Using Polymorphism///////////////////////////////////
//Setters
void setName(string) override;
void set_id(int) override;
void set_address(string) override;
void setEmail(string) override;
void set_payments(float, string, float);
//Getters
string getName(int) override;
int get_id(int) override;
string getEmail(int) override;
string get_address(int) override;
//for showing payments
void showPaymentDetails(int) override;
private:
vector<int> faculty_id;
vector<string> faculty_name;
vector<string> faculty_email;
vector<string> faculty_address;
vector<string> faculty_type;
vector<string> faculty_description;
Accounts accounts;
};
Faculties::Faculties()
{
}
Faculties::~Faculties()
{
}
void Faculties::set_id(int id)
{
this->faculty_id.push_back(id);
}
void Faculties::setEmail(string email)
{
this->faculty_email.push_back(email);
}
void Faculties::setName(string name)
{
this->faculty_name.push_back(name);
}
void Faculties::set_address(string saddress)
{
this->faculty_address.push_back(saddress);
}
string Faculties::getName(int index)
{
return this->faculty_name[index];
}
int Faculties::get_id(int index)
{
return this->faculty_id[index];
}
string Faculties::getEmail(int index)
{
return this->faculty_email[index];
}
string Faculties::get_address(int index)
{
return this->faculty_address[index];
}
void Faculties::set_payments(float decidedSalary, string payment_method, float total_working_hours)
{
//Using composition
accounts.set_decided_salary(decidedSalary);
accounts.set_payment_method(payment_method);
accounts.set_total_working_hours(total_working_hours);
}
void Faculties::showPaymentDetails(int index)
{
cout << "\nThe decided salaray of faculty with name " << faculty_name[index] << " is " <<
accounts.get_decided_salary(index);
cout << "\nThe payment method of faculty with name " << faculty_name[index] << " is " <<
accounts.get_payment_method(index);
cout << "\nThe deducted salary of faculty with name " << faculty_name[index] << " is " <<
accounts.get_deducted_salary(index);
cout << "\nThe paid salary of faculty with name " << faculty_name[index] << " is " <<
accounts.get_paid_salary(index);
cout << "\nThe bonus salary paid of faculty with name " << faculty_name[index] << " is " <<
accounts.get_bonus_salary(index);
}
#pragma一次
#包括“Accounts.h”
#包括“Department.h”
#包括
#包括
#包括
使用名称空间std;
班级院系:公共部门
{
公众:
Faculties()=默认值;
~Faculties()=默认值;
//////////////////////////////////使用多态性///////////////////////////////////
//二传手
无效集合名(字符串)覆盖;
无效集合id(int)覆盖;
无效集合地址(字符串)覆盖;
无效设置电子邮件(字符串)覆盖;
无效集合付款(浮动、字符串、浮动);
//吸气剂
字符串getName(int)重写;
int get_id(int)覆盖;
字符串getEmail(int)覆盖;
字符串get_地址(int)覆盖;
//用于显示付款
作废showPaymentDetails(int)覆盖;
私人:
矢量识别;
载体名称;
矢量教员电子邮件;
矢量地址;
向量u型;
向量描述;
账户;
};
学院::学院()
{
}
学院::~Faculties()
{
}
空系::集合id(内部id)
{
此->教员id.推回(id);
}
void Faculties::setEmail(字符串电子邮件)
{
此->教员电子邮件。向后推(电子邮件);
}
void Faculties::setName(字符串名称)
{
此->教员姓名。推回(姓名);
}
void Faculties::set_地址(字符串saddress)
{
这->教员地址。推回(女鞍);
}
字符串Faculties::getName(int索引)
{
返回此->教员名称[索引];
}
int Faculties::get_id(int索引)
{
返回此->教员id[索引];
}
字符串Faculties::getEmail(int索引)
{
返回此->教职员工电子邮件[索引];
}
字符串功能::获取地址(整数索引)
{
返回此->教员地址[索引];
}
无效教师::设置工资(浮动决定工资、字符串工资方法、浮动总工时)
{
//使用构图
账户。设置决定工资(决定工资);
账户。设置付款方式(付款方式);
设置总工作时间(总工作时间);
}
void Faculties::showPaymentDetails(内部索引)
{
cout作为@1201programalam包含在注释中,您正在包含循环引用,这可能会使编译器感到恼火,并且程序无法编译,因此请删除那些不必要的头文件。还应将department类的析构函数设置为虚拟。确保只有析构函数是虚拟的,而不是构造函数。使department类的析构函数成为虚拟的nt析构函数虚拟。ppl否决你的原因是你没有发布一个最小的可复制示例。也宁愿在你的帖子中引用你的错误,而不是给出链接screenshot@user谢谢你,先生,我正在试你的advice@user先生,我已经尝试了您的解决方案,但错误仍然与我编写的Department()=default;virtual~Department()相同;//声明方法
您有循环包含。基类不需要知道任何有关派生类的信息。@1201非常感谢我的问题已经解决,错误已经消失
#pragma once
#include"Department.h"
#include"Student.h"
#include"Courses.h"
#include"SubCampuses.h"
#include"Faculties.h"
#include"Employee.h"
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Display
{
public:
Display()=default;
~Display()=default;
void setStudentsData(string, int, string)
{
}
void setStudentsData(string name, int id, string address, string email, int departmentID, int departmentStrength, string HODname);
void setStudentsAcademicRecord(float marks, char grades, float attandancePercentage, float CGPA);
void setStudentCourseInfo(Courses courses, string coursesEnrolled, float courseWiseAttandancePercentage, float courseWiseMarks);
//Setting the faculties of students
void setFacultiesInfo(string name,int id,string address,string email, float decidedSalary, string payment_method, float total_working_hours);
//setting the employees info
//void setEmployeesInfo(string name, int id, string address, string email, float decidedSalary, string payment_method, float total_working_hours);
void ShowStudentCoursesInfo();
void ShowStudentRecord(int);
void ShowFacultiesDetails(int);
//void ShowEmployeesDetails(int);
private:
//Using Inheritance
Student *student;
Courses courses;
Faculties faculties;
//Using Polymorphism
Department* department=new Faculties(); ///////////////////Here is the error ////////////////////////
};
Display::Display()
{
}
Display::~Display()
{
}
void Display::setStudentsAcademicRecord(float marks, char grades, float attandancePercentage, float CGPA)
{
student->set_student_marks(marks);
student->set_student_grades(grades);
student->set_Attandance_percentage(attandancePercentage);
student->set_GCPA(CGPA);
}
void Display::setStudentsData(string name, int id, string address, string email,int departmentID,int departmentStrength,string HODname)
{
student->setName(name);
student->set_id(id);
student->set_address(address);
student->setEmail(email);
}
void Display::ShowStudentRecord(int id)
{
cout<<"\nThe name of student is equal to "<<student->getName(id);
cout << "\nThe Id of student is equal to " << student->get_id(id);
cout << "\nThe Email of student is equal to " << student->getEmail(id);
cout << "\nThe Adress of student is equal to " << student->get_address(id);
//Now showing the student academic records
student->ShowStudentAcademicRecord(id);
}
void Display::setStudentCourseInfo(Courses courses, string coursesEnrolled, float courseWiseAttandancePercentage, float courseWiseMarks)
{
courses.set_courses_enrolled(coursesEnrolled);
courses.set_coursewise_attendance_percentage(courseWiseAttandancePercentage);
courses.set_course_wise_marks(courseWiseMarks);
}
void Display::ShowStudentCoursesInfo()
{
//Passing the courses object to the courses info
student->ShowStudentCoursesInfo(courses);
}
void Display::setFacultiesInfo(string name, int id, string address, string email, float decidedSalary, string payment_method, float total_working_hours)
{
department->setName(name);
department->set_id(id);
department->set_address(address);
department->setEmail(email);
department->set_payments(decidedSalary, payment_method, total_working_hours);
}
void Display::ShowFacultiesDetails(int id)
{
cout<<"\nThe id of department faculty is "<<department->get_id(id);
cout << "\nThe Name of department faculty is " << department->getName(id);
cout << "\nThe Email of department faculty is " << department->getEmail(id);
cout << "\nThe Address of department faculty is " << department->get_address(id);
cout << "\nThe Department faculty strength is " << department->getDepartmentStrength();
}