這是代碼,我創建了一個包含另一個類的對象的類。我得到錯誤的輸出,即垃圾值..我不知道什麼是問題。複製構造函數在字符數組中無法正常工作
突出顯示的行,的輸出提供了垃圾的價值,但存在編譯沒有錯誤..我一直都使用微軟的Visual Studio 2010的
#include<iostream>
#include<conio.h>
#include<string>
#include<cstring>
using namespace std;
class Address
{
char *street_no,*house_no,*city,*code;
public:
**Address(Address &obj)
{
int size;
cout<<obj.street_no;
size=strlen(obj.street_no);
street_no=new char[size+1];
strcpy(street_no,obj.street_no);
size=strlen(obj.house_no);
house_no=new char[size+1];
strcpy(house_no,obj.house_no);
size=strlen(obj.city);
city=new char[size+1];
strcpy(city,obj.city);
size=strlen(obj.code);
code=new char[size+1];
strcpy(code,obj.code);
}**
Address()
{
street_no=new char;
house_no=new char;
city=new char;
code=new char;
}
~Address()
{
delete street_no;
delete house_no;
delete city;
delete code;
}
void set()
{
cout<<"Enter Street Number : ";
cin>>street_no;
cout<<"Enter House Number : ";
cin>>house_no;
cout<<"Enter City : ";
cin>>city;
cout<<"Enter Code : ";
cin>>code;
}
void get()
{
cout<<"\nStreet Number : "<<street_no;
cout<<"\nHouse Number : "<<house_no;
cout<<"\nCity : "<<city;
cout<<"\nCode : "<<code;
}
};
class person
{
Address obj;
public:
person()
{
}
person(person &one)
{
Address::Address(one.obj);
}
void set()
{
obj.set();
}
void get()
{
obj.get();
}
~person()
{
exit(0);
}
};
int main()
{
person A;
A.set();
A.get();
**
person B(A);
B.get();
**
getch();
}
如果您手動分配內存,爲什麼包含?你應該利用std :: string,除非這是作業,你不得不這樣做。 –
ApplePie
使用C++字符串,修改你的代碼並告訴我們你遇到了什麼錯誤。其次,你的構造函數沒有做任何「特殊」的事情。你可以在'set'函數中完成'new char'。改變你的構造函數,把street_no,house_no,city,code作爲參數。你真的不應該在構造函數中做I/O。 – iab