33:动态内存的传递

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Base
 5 {
 6 private:
 7   char*name;
 8 public:
 9   Base(char* className)
10   {
11     name=new char[strlen(className)];
12     strcpy(name,className);
13   }
14   ~Base()
15   {
16     delete name;
17   }
18   char*copyName()
19   {
20     char newname[10]="";
21     strcpy(newname,name);
22     return newname;
23   }
24   char *getName()
25   {
26     return name;
27   }
28 };
29 
30 class Subclass:public Base
31 {
32 public:
33   Subclass(char* className):Base(className)
34   {}
35 };
36 int main()
37 {
38   Base *pBase=new Subclass("text");
39   printf("name:%s\n",pBase->getName());
40   printf("new name:%s\n",pBase->copyName());
41   return 0;
42 }

/*
程序有Base和Subclass两个类,其中Subclass是Base的子类。Subclass被用来向类Base的构造函数传递字符串参数,从而为Base的私有成员赋值.
代码第11行中,在类Base的构造函数中用new运算符分配堆内存。其内存是传入的字符串长度大小。这里有个错误,由于字符串是以"\0"作为
结束符的,应该多分配一字节存放"\0"。
类Base的成员函数copyName(),返回其数组的地址。由于数组位于栈中,当copyName调用结束后,栈就会被销毁,这里返回堆内存地址。

代码第11行改为:
name=new char[strlen(className)+1];
代码第20行改为:
char *newname=new char[strlen(name)+1];
修改后的正确输出为:
name:test
new name:test
*/

posted on 2016-03-09 23:12  h3iß3n  阅读(90)  评论(0)    收藏  举报

导航