所以我有这些课程:
在main中我编写了一个指针数组:
student *arry[10];
如何让每个单元格指向不同类的对象?
例如 :
我想要单元格0,2,4
指向class medstudent
的对象
使用(新声明)
谢谢
这是class medStudent
#include<iostream>
#include"student.cpp"
using namespace std;
class medStudent:public student {
public :int clinicH;
public:
medStudent(int ch, string n , int i ):student(n,i){
setClinicH(ch);
cout << "New Medecine Student" << endl;
}
~medStudent(){
cout << "Medecine Student Deleted" << endl;
}
medStudent(medStudent & ms):student(ms){
cout << "New Copy Medecined Student" << endl;
}
medstudent(){
}
void setClinicH(int ch){
clinicH = ch;
}
int getClinicH()const{
return clinicH;
}
void print()const{
student::print();
cout << "Clinical Hours: " << getClinicH() << endl;
}
};
这是班级学生:
#include <iostream>
//#include"medstudent.cpp"
using namespace std;
class student//:public medstudent
{
public :
static int numberOfSaeeds;
const int id;
string name;
public:
~student(){
cout << "Delete Student: " << getName() << " " << endl ;
}
student(string n, int i):id(i){
setName(n);
cout << "Student with args" << endl ;
}
void setName(string n){
name = n;
}
string getName()const{
return name;
}
void print()const{
cout << "My name is: " << name << endl;
cout << "My ID is: " << id << endl;
}
void setNOS(int nos){
numberOfSaeeds = nos;
}
int getNOS(){
return numberOfSaeeds;
}
void printAddress()const{
cout << "My address is " << this << endl;
}
student * getAddress(){
return this;
}
student(student & sc):id(sc.id){
name = sc.name;
setName(sc.getName());
cout << "New Object using the copy constructor" << endl;
}
};
这是主要代码:
#include<iostream>
using namespace std;
#include"time.cpp"
#include "student.cpp"
//#include"medstudent.cpp"
int main(){
student a1("asa" , 2);
student * a[10];
a[3]= new student("jj", 22 );
a[0] = new medStudent();
}
答案 0 :(得分:0)
由于您显式声明了medStudent
构造函数,因此编译器不会为您的类创建默认构造函数。当你执行new medStudent();
时,你(明确地)试图调用默认的构造函数,这是不存在的。
这会给你一个构建错误,如果你读它就应该很容易诊断,最重要的是向我们展示它(当询问有关构建错误的问题时,总是包含完整的错误和未编辑的错误输出,包括问题正文中的任何信息输出,以及导致错误的代码。)
解决方案?调用现有的参数化构造函数。例如。 new medStudent("foo", 123)
。
顺便说一句,如果你希望继承工作正常,并且在删除子类的对象时要调用基类析构函数,那么你需要创建析构函数virtual
。