继承类时出现问题,能否帮忙看看是哪里出错了?

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