arry of pointers(class)

时间:2016-03-05 18:47:16

标签: c++ class pointers

所以我有这些课程:

在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();
}

1 个答案:

答案 0 :(得分:0)

由于您显式声明了medStudent构造函数,因此编译器不会为您的类创建默认构造函数。当你执行new medStudent();时,你(明确地)试图调用默认的构造函数,这是不存在的。

这会给你一个构建错误,如果你读它就应该很容易诊断,最重要的是向我们展示它(当询问有关构建错误的问题时,总是包含完整的错误和未编辑的错误输出,包括问题正文中的任何信息输出,以及导致错误的代码。)

解决方案?调用现有的参数化构造函数。例如。 new medStudent("foo", 123)

顺便说一句,如果你希望继承工作正常,并且在删除子类的对象时要调用基类析构函数,那么你需要创建析构函数virtual