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
*/
浙公网安备 33010602011771号