class Person{
private:
char *name=new char[10];
public:
void SetName(char *sname)
{
int strlen=sizeof(name)/sizeof(name[0]);
cout<<strlen<<endl;
name=sname;
cout<<name<<endl;
}
char* GetName()
{
cout<<"GetName:"<<name<<endl;
return name;
}
void PrintfInfo()
{
cout<<"学生姓名为:"<<name<<endl;
}
};
class Student:public Person{
private:
int snumber;
public:
void SetNum(int number)
{
snumber=number;
}
int GetNum()
{
return snumber;
}
void PrintInfo()
{
cout<<"学生的姓名是:"<<GetName()<<endl;
cout<<"学生的学号是:"<<snumber<<endl;
}
};
int main() {
char name[]={"avhbj"};
Person p;
p.SetName(name);
p.GetName();
p.PrintfInfo();
Student s;
s.SetNum(7788);
s.GetNum();
s.PrintInfo();
return 0;
}
运行之后结果是这样:
8
avhbj
GetName:avhbj
学生姓名为:avhbj
GetName:燶
学生的姓名是:燶
学生的学号是:7788
Student s;
你没有给s变量的setName方法赋值呀,没有赋值出来就是不可预知的错误。
调用
s.SetName(name);
语句就可以正常执行。
int strlen=sizeof(name)/sizeof(name[0]);
cout<<strlen<<endl;
name=sname;//这里肯定不行啊,直接把name的地址都改掉了啊,你new的空间就成野指针了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632