C++ 【错误求帮改】构造函数、析构函数,delete等编程时的问题

构建一个学生类,(1)包含姓名、高数、英语、C++四个私有成员变量,写一个构造函数为四个私有成员变量赋值。写一个析构函数,用delete语句回收对象所占内存空间,并每次打印一行“XX同学对象被回收。”(2)类里定义两个成员函数,分别为求每个人的平均分、输出成绩。(3)在main函数里构建一个10个学生的对象数组,并调用构造函数赋值,然后输出10位同学每个人的平均分。(4)调用析构函数,回收内存空间。
#include<iostream>
using namespace std;
class student{
private:
int name;
int math;
int english;
int ccc;
public:
student(int n,int m,int e,int c)
{
name=n;
math=m;
english=e;
ccc=c;
}
~student(){
delete[]name;
cout<<name<<"同学对象被回收"<<endl;
};
void average(){
int a;
a=(math+english+ccc)*(1/3);
cout<<name<<" "<<a<<endl;
}
};
int main()
{
student stu[10] = {student("a", 10,20,30), student("b", 10,20,30),student("c", 10,20,30),student("d", 10,20,30),student("e", 10,20,30),
student("f", 10,20,30),student("g", 10,20,30),student("h", 10,20,30),student("i", 10,20,30),student("j", 10,20,30),student("k", 10,20,30),};
stu[0].average();
stu[1].average();
stu[2].average();
stu[3].average();
stu[4].average();
stu[5].average();
stu[6].average();
stu[7].average();
stu[8].average();
stu[9].average();
~student();
return 0;
}
以下是部分错误,地方写不下啦,求帮忙,谢谢,会补赏:
18 21 C:\Users\liuyi\Desktop\1.cpp [Error] type 'int' argument given to 'delete', expected pointer
C:\Users\liuyi\Desktop\1.cpp In function 'int main()':
29 42 C:\Users\liuyi\Desktop\1.cpp [Error] invalid conversion from 'const char*' to 'int' [-fpermissive]
10 3 C:\Users\liuyi\Desktop\1.cpp [Note] initializing argument 1 of 'student::student(int, int, int, int)'

// 下面是我修正的代码
#include<iostream>
using namespace std;
class student {
private:
char* name;
int math;
int english;
int ccc;
public:
student(const char* n, int m, int e, int c)
{
name = new char[100];  // 为了配合你的delete,我使用new创建了一个数组。
strcpy_s(name, 100, n);  // 字符串拷贝函数,来初始化name
math = m;
english = e;
ccc = c;
}
~student() {
delete[] name;  // 只有被new[]的对象,才需要使用delete[]进行析构。
cout << name << "同学对象被回收" << endl;
};
void average() {
int a;
a = (math + english + ccc)*(1 / 3);
cout << name << "  " << a << endl;
}
};
int main()
{
student stu[10] = { 
student("a", 10,20,30), 
student("b", 10,20,30),
student("c", 10,20,30),
student("d", 10,20,30),
student("e", 10,20,30),

student("f", 10,20,30),
student("g", 10,20,30),
student("h", 10,20,30),
student("i", 10,20,30),
// student("j", 10,20,30),  // 只有10个元素,所以我删除一个
student("j", 10,20,30), };
stu[0].average();
stu[1].average();
stu[2].average();
stu[3].average();
stu[4].average();
stu[5].average();
stu[6].average();
stu[7].average();
stu[8].average();
stu[9].average();
// ~student(); // 析构函数不能由用户进行调用。
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-14
把你的name的类型换成string
相似回答