我有一个非常简单的名为 person 的类,如下所示,我只有两个函数有问题,即 setstring () 函数和 setname() 函数,我从 setname 函数调用 setstring() 函数。
唯一的问题是当我在主函数中写
Object.setname(“Zia”);
结果正常,如输出屏幕所示,
现在当我写
Object.setname(“Zia ur Rahman”);
没有任何显示,因为您可以看到输出屏幕。
我知道问题是当我将名称指针传递给 setstring () 函数时,但我对此感到困惑,请详细解释这里发生了什么。
#include<iostream.h>
class person
{
char* name;
public:
person();
void setname(const char*);
void setstring(const char*, char*);
void print()const;
};
person::person()
{
name=new char[3];
strcpy(name,"NILL");
name[3]='\0';
}
void person::setstring(const char* s, char*p)
{
if(s!=NULL)
{
delete[] p;
p=new char[strlen(s)];
strcpy(p,s);
p[strlen(s)]='\0';
}
}
void person::setname(const char* n)
{
setstring(n, name);//passing data member name
}
void person::print()const
{
cout<<"Name: "<<name<<endl;
}
main()
{
person object;
object.setname("Zia ur Rahman");
object.print();
system("pause");
}
alt text http://img264.imageshack.us/img264/8867/inheritanceimage004.jpg
alt text http://img263.imageshack.us/img263/3770/inheritanceimage003.jpg
最佳答案
什么都不打印的具体原因是在setstring
中,p
是名称指针的拷贝,而不是对它的引用。尝试将 setstring
的签名更改为:
void setstring(const char* s, char*& p);
(注意 &
)。
请参阅代码中其他重大错误的其他答案 - 除非这些问题得到修复,否则您可能会遇到崩溃或奇怪的行为。
除非代码的目的只是为了学习动态数组,否则请使用 std::string
:-)。
关于C++类,面向对象编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2108389/