C++类,面向对象编程

标签 c++ oop

我有一个非常简单的名为 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/

相关文章:

c++ - 如何使 OpenGL SuperBible 6 应用程序可移植?

c++ - 将#include 包装在命名空间 block 中是个好主意吗?

java - 查找最大嵌套列表数

c++ - 有哪些技巧可以使具有大量计算的函数变得干净?

java - Java中的继承,访问子方法并使用父类数组

C++ 以二进制形式读取文本文件并在控制台中显示

c++ - 使用 reinterpret_cast 将函数强制转换为 void*,为什么不违法?

c++ - 实现接口(interface)的常量方法和文件读取

c - C 中的面向对象模式?

c++ - 派生类的复制构造函数 (C++) 的初始化列表中的基类