成员函数中可以调用构造函数吗?
比如,下例的程序是正确的:
#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对象
[解决办法]
一楼正解
[解决办法]
++
LZ不按常理出牌啊