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

成员函数中可以调用构造函数吗?该如何解决

2013-01-11 
成员函数中可以调用构造函数吗?比如,下例的程序是正确的:#includeiostreamusing namespace stdint xh0

成员函数中可以调用构造函数吗?
比如,下例的程序是正确的:

#include<iostream>
using namespace std;
int xh=0;                   // 全局变量,用于初始化Shape对象的id值
class Shape
{
private:
    int id;
    char *name;             // 指针,它指向存放数据的内存,该内存要动态分配
public:
    Shape(char *Name)       // 构造函数
    {
        name=new char[strlen(Name)+1];  // 多1是为了存储字符串的结束标记
        strcpy(name,Name);
        id=++xh;
        cout<<"构造对象: "<<name<<" id="<<id<<endl;
    }
    Shape(Shape & s)        // 拷贝构造函数
    {
        name=new char[strlen(s.name)+1];
        strcpy(name,s.name);
        id=++xh;
        cout<<"构造对象: "<<name<<" id="<<id<<endl;
    }
    ~Shape()                // 析构函数
    {
        cout<<"析构对象: "<<name<<" id="<<id<<endl;
        delete [] name;
    }
};
void main()
{
    Shape s1("三角形"),s2("长方形"), s3(s2);
    cout<<"-------------Over-------------\n";  
}


运行结果:
构造对象: 三角形 id=1
构造对象: 长方形 id=2
构造对象: 长方形 id=3
-------------Over-------------
析构对象: 长方形 id=3
析构对象: 长方形 id=2
析构对象: 三角形 id=1
请按任意键继续. . .


但若修改为:
    Shape(Shape & s)        // 拷贝构造函数
    {
Shape(s.name);
    }


则会出现“内存不能读”的错误窗口,运行的结果页很奇怪,为什么呢?
[解决办法]
Shape(s.name)的时候是创建了一个匿名的临时Shape类对象,并不是this对象
[解决办法]
一楼正解
[解决办法]
引用:
Shape(s.name)的时候是创建了一个匿名的临时Shape类对象,并不是this对象

++
LZ不按常理出牌啊

热点排行