首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

麻烦高手,看看函数怎么返回对象的

2012-05-27 
麻烦高手,看看函数如何返回对象的C/C++ code class A{public:int lenchar* pA(int n){lennp(char*)ma

麻烦高手,看看函数如何返回对象的

C/C++ code
 class A{public:    int len;    char* p;    A(int n)    {        len=n;        p=(char*)malloc(n+1);        memset(p,'a',n+1);        printf("A\n");    }    ~A()    {        delete p;        len=0;        printf("~A\n");    }};A CreateA() {     A a(4);    return a; }int main(){    A b=CreateA();//发现b并没有被赋值}


代码如上,运行后,发现b还是空字符串。请问该如何修改,才能使b="aaaaa"?
原因:对象a在return之前就析构了。

[解决办法]
探讨

楼上的老兄,不能改变CreateA()的返回类型啊,只能是返回对象A,不能返回指针,有办法吗?
我看std中的string可以做到。

[解决办法]
已赋值啊
C/C++ code
int main(){    A b=CreateA();//发现b并没有被赋值     for(int i = 0; i <= 4; ++i)        {            printf("%c", b.p[i]);        }}
[解决办法]
重载=吧。因为你的类内部使用了指针,所以用=来做,用指针开辟内存,然后拷贝数据吧
[解决办法]
C/C++ code
int main(){    A b=CreateA();//发现b并没有被赋值    printf("%d\n",b.len);}
[解决办法]
返回的是传值 会发生拷贝 

写个拷贝构造函数
[解决办法]
这样的类成员中有指针的类一定要写三个函数:
拷贝构造函数,重载赋值操作符,析构函数

热点排行