gpt4 book ai didi

C++类,面向对象编程

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:36 24 4
gpt4 key购买 nike

我有一个非常简单的名为 person 的类,如下所示,我只有两个函数有问题,即 setstring () 函数和 setname() 函数,我从 setname 函数调用 setstring() 函数。唯一的问题是当我在主函数中写
Object.setname(“Zia”);
结果正常,如输出屏幕所示,现在当我写
Object.setname(“Zia ur Ra​​hman”);
没有任何显示,因为您可以看到输出屏幕。

我知道问题是当我将名称指针传递给 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com