求各位C++大神为菜鸟看一个小程序
程序代码如下://gouzaohanshuchongzaijixigouhanshuzuoyong.cpp:Definestheentrypointfortheconso...
程序代码如下:
// gouzaohanshuchongzaijixigouhanshuzuoyong.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"
#include "string.h"
const char *null=" ";//符号常量的定义
class Student
{
public:
Student();//无参构造函数的声明
Student(char* pname,char sex,char* pid,int a,float s);//带参构造函数声明
void getid(char* pid);//内联成员
void getname(char* pname);
void getsex(char sex1){sex=sex1;}
void getage(int a){age=a;}
void getscore(float s){score=s;}
void display();
~Student();//析构函数声明
private:
char* name;
char sex;
char* id;
int age;
float score;
};
Student::Student()
{
id=new char[10];//动态创建字符串
strcpy(id,"00000000");//动态申请内存
name=new char[20];
strcpy(name,null);
sex=' ';
age=0;
score=0;
}
Student::Student(char* pname,char sex1,char* pid,int a,float s)//带参构造函数的实现
{
id=new char[strlen(pid)+1];//动态申请内存单元
strcpy(id,pid);
name=new char[strlen(pname)+1];
strcpy(name,pname);
sex=sex1;
age=a;
score=s;
}
void Student::getid (char* pid)
{
delete[] id;
id=new char[strlen(pid)+1];
strcpy(id,pid);
}
void Student::getname (char* pname)
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
void Student::display ()
{
cout<<"name:"<<name<<endl;
cout<<"id:"<<id<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<endl;
}
Student::~Student ()
{
delete[] name;//释放用new申请的内存单元
delete[] id;//将字符串所占用的空间全部释放掉
}
int main(int argc, char* argv[])
{
Student s1;//调用无参数构造函数创建对象s1
s1.display ();
s1.getid ("2011301");
s1.getname ("ZouMei");
s1.getsex ('F');
s1.getage (22);
s1.getscore (90);
s1.display ();
Student s2("LuLu",'F',"2011302",22,90);//通过调用带参数构造函数创建对象s2
s2.display ();
return 0;
}
运行后有点错。 展开
// gouzaohanshuchongzaijixigouhanshuzuoyong.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"
#include "string.h"
const char *null=" ";//符号常量的定义
class Student
{
public:
Student();//无参构造函数的声明
Student(char* pname,char sex,char* pid,int a,float s);//带参构造函数声明
void getid(char* pid);//内联成员
void getname(char* pname);
void getsex(char sex1){sex=sex1;}
void getage(int a){age=a;}
void getscore(float s){score=s;}
void display();
~Student();//析构函数声明
private:
char* name;
char sex;
char* id;
int age;
float score;
};
Student::Student()
{
id=new char[10];//动态创建字符串
strcpy(id,"00000000");//动态申请内存
name=new char[20];
strcpy(name,null);
sex=' ';
age=0;
score=0;
}
Student::Student(char* pname,char sex1,char* pid,int a,float s)//带参构造函数的实现
{
id=new char[strlen(pid)+1];//动态申请内存单元
strcpy(id,pid);
name=new char[strlen(pname)+1];
strcpy(name,pname);
sex=sex1;
age=a;
score=s;
}
void Student::getid (char* pid)
{
delete[] id;
id=new char[strlen(pid)+1];
strcpy(id,pid);
}
void Student::getname (char* pname)
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
void Student::display ()
{
cout<<"name:"<<name<<endl;
cout<<"id:"<<id<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<endl;
}
Student::~Student ()
{
delete[] name;//释放用new申请的内存单元
delete[] id;//将字符串所占用的空间全部释放掉
}
int main(int argc, char* argv[])
{
Student s1;//调用无参数构造函数创建对象s1
s1.display ();
s1.getid ("2011301");
s1.getname ("ZouMei");
s1.getsex ('F');
s1.getage (22);
s1.getscore (90);
s1.display ();
Student s2("LuLu",'F',"2011302",22,90);//通过调用带参数构造函数创建对象s2
s2.display ();
return 0;
}
运行后有点错。 展开
展开全部
void Student::getname (char* pname)
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
错在这了
首先 第一句 你delete了 传递参数的指针“pname”,后面再用到pname时必然出错,应该改为 “name”,还有就是第二句的“id” 同样应该改为“name”,因为这里是要对name进行内存动态分配 。
所以下面的是正确的写法
void Student::getname (char* pname)
{
delete[] name;
name=new char[strlen(pname)+1];
strcpy(name,pname);
}
同样作为一个菜鸟,建议你一下:指针声明后要马上进行初始化,没有指向任何内容时要赋空值,也就是说在构造函数里赋值NULL,delete后同样赋值NULL;delete时尽量先加个判断,若不是NULL再delete。这些小的习惯会对以后的编程有很大的帮助,可以让你省去很多不必要的麻烦。当然如果你只是为了应付考试那就算了,当我没说。
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
错在这了
首先 第一句 你delete了 传递参数的指针“pname”,后面再用到pname时必然出错,应该改为 “name”,还有就是第二句的“id” 同样应该改为“name”,因为这里是要对name进行内存动态分配 。
所以下面的是正确的写法
void Student::getname (char* pname)
{
delete[] name;
name=new char[strlen(pname)+1];
strcpy(name,pname);
}
同样作为一个菜鸟,建议你一下:指针声明后要马上进行初始化,没有指向任何内容时要赋空值,也就是说在构造函数里赋值NULL,delete后同样赋值NULL;delete时尽量先加个判断,若不是NULL再delete。这些小的习惯会对以后的编程有很大的帮助,可以让你省去很多不必要的麻烦。当然如果你只是为了应付考试那就算了,当我没说。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哪错? 错误提示是什么?
更多追问追答
追问
是运行结果有错 ,给对象的成员赋值好像没有成功,我是菜鸟 能不能帮我看下,程序要实现的意思你应该很容易看懂吧
追答
delete[] 你每次都释放 怎么会赋值成功
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询