如何在Cpp中将变量值分别分配给重载构造函数(而不是在初始化时)?

时间:2018-08-20 04:36:44

标签: c++ arrays class object constructor

https://repl.it/@IT18117110/MidRevLecEx << -----代码链接

This is the error I got
错误:“(”令牌之前的预期unqualified-id      st [i] .Student::( Name_i,id_i);

#include <iostream>
#include "Student.h"
#include "string.h"
using namespace std;

int main() {

  int i = 0;
  char Name_i[20];
  int id_i;
  int mark1_i;
  int mark2_i;
  Student st[3];

  do{

    cout<<"Enter Name:"<<i;
    cin>>Name_i;
    cout<<"Enter ID:";
    cin>>id_i;
    cout<<"Enter Marks1:";
    cin>>mark1_i;
    cout<<"Enter Marks2:";
    cin>>mark2_i;

    st[i].Student::(Name_i, id_i);
    st[i].setMark1(mark1_i);
    st[i].setMark2(mark2_i);
    st[i].printMarks();
    st[i].getAverageMark();
    st[i].~Student();

    i++;
  }while(i < 3);

  return 0;
}

3 个答案:

答案 0 :(得分:0)

创建Student类的静态实例时,已经调用了Student类的默认构造函数。          学生st [3]; 您可以简单地在Student类构造函数中编写print语句(不带任何参数),您会发现它被调用了3次。

据我所知,构造函数无法显式调用,它用于构造对象。我认为您应该声明Student类实例的指针而不是声明静态指针,并且当您提供内存(通过调用new运算符)时,可以提供对象初始化参数值。

答案 1 :(得分:0)

当您在堆栈中分配对象时(按照您在示例中所做的方式),不应显式调用构造函数或析构函数。 构造函数在声明处调用:

 Student st[3];

并且在退出范围时调用Destructor。

 return 0;
} <--Here

如果要设置Name_iid_i,请使用类似于用于设置标记(setMark1setMark2)的设置器功能。

答案 2 :(得分:0)

您不应尝试显式调用构造函数或析构函数。

为数组中的对象分配一个新值,就像使用int s或其他方法一样:

st[i] = Student(Name_i, id_i);

然后删除

st[i].~Student();