程序如下:
#include<iostream.h>
#include<string.h>class Syclass{
public:
char *ch;
Syclass(){}

void get(char *c)
{
ch=new char[20];
strcpy(ch,c);
} void display()
{
cout<<endl<<ch;
}
};void main()
{
Syclass a,b;
a.get("Hello!");
b=a;             
a.display();
b.display();
cout<<endl<<&a.ch;
cout<<endl<<&b.ch;
}按理说Syclass中没有人为定义拷贝构造函数,那么就得用默认的,所以b=a这一句就得调用默认的拷贝构造函数,但默认的应该不自动为对象分配资源,只进行成员的赋值,所以最后两行输出的地址应该一样啊,可是我运行完后输入却是这样的:Hello!
Hello!
0x0012FF7C
0x0012FF78Press any key to continue
这是怎么回事啊,还有再请问一下,现在VC++的升级版是C.net吗,请问我现在用VC++的升级版学行吗?

解决方案 »

  1.   

    实际上a.ch是和b.ch值一样,你打印的变量ch存储的地址
    cout<<endl<<(int)a.ch;
    cout<<endl<<(int)b.ch;
      

  2.   

    实际上a.ch是和b.ch值一样,你打印的变量ch存储的地址
    cout<<endl<<(int)a.ch;
    cout<<endl<<(int)b.ch;
      

  3.   

    char *ch;
    ch存储的是其所指向的地址指针,你可以打印出来,cout << endl << (int)a.ch;也可以在调试模式下观察a,b的成员ch的地址指针,一定是相同的!
    &ch,是ch指针变量的地址。
    你是混淆了概念,实际你打印的是a,b成员ch的地址,并非其所指向的地址!
      

  4.   

    cout<<endl<<a.ch;
    cout<<endl<<b.ch;
    这样就可以了,还有一点,你用new来分配内存,却没有用delete来释放,有可能会导致内存溢出。
      

  5.   

    这么说,问题就多了
    必须显式定义赋值=运算符函数,否则你在析构函数中delete[] 时,由于缺省的按位拷贝,虽然b.ch不等于NULL,可是你delete[] 时却会出现问题。同时在构造函数中令ch=NULL;