gpt4 book ai didi

c++ 2构造函数和类中的析构函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:19 25 4
gpt4 key购买 nike

这是教授吹嘘的一位同学的正确代码,我不明白为什么它需要一个双重构造函数,我最初只有第一个函数,但无法弄清楚它需要两个,这落后于我作为专业人士的进步

class Studentrecords
{
private:

struct student
{
string name;
string address;
int ID;
double gpa;
};

student *stackArray;
int stackSize;
int top;

public:
Studentrecords();
Studentrecords(int size);
~Studentrecords();
void push(string name, string address, int id, double gpa);
void pop();
bool isFull() const;
bool isEmpty() const;
void display();
};

Studentrecords::Studentrecords(int size)
{
stackArray = new student[size];
top = 0;
}

Studentrecords::Studentrecords()
{
stackSize = 25;
stackArray = new student[stackSize];
top = 0;
}

Studentrecords::~Studentrecords()
{
delete [] stackArray;
}

最佳答案

不需要两个构造函数,这就是类的定义方式。这样,您可以通过两种方式创建对象:

Studentrecords s(15);

这将创建一个大小为 15 的 Studentrecords 对象,或者

Studentrecords s;

这将调用默认构造函数,并创建一个类型为 Studentrecords 且大小为 25 的对象。

我必须指出,这是错误的代码:

  • 默认的 Studentrecords() 构造函数可以替换为 Studentrecords(int size = 25) 以避免代码重复。
  • 不使用初始化列表
  • 您在类中管理内存,这意味着您需要一个复制构造函数和复制赋值运算符
  • 最后,您使用的是 C 风格数组而不是 std::vector

关于c++ 2构造函数和类中的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com