类方法详解
1.构造函数
构造函数不同与其他类方法,因为他创建新的对象,而其他类方法只是被现有的对象调用。这是构造函数不被继承的原因之一。继承意味着派生类对象可以使用基类的方法,
然而,构造函数在完成其工作之前,对象并不存在。
2.析构函数
一定要定义显示析构函数来释放构造函数使用new分配的所有内存,并完成类对象所需的任何特殊的清理工作。对于基类,即使它不需要析构函数,也应提供一个析构函数。
3.转换
使用一个参数就可以调用的构造函数定义了从参数类型到类类型的转换。例如:下述Star类的构造函数原型:
Star(const char *);//converts char * to Star
Star(const Spectral &,int members=1);//converts Spectral to Star
将可转换的类型传递给以类为参数的函数时,将调用转换构造函数。例如,在如下代码中:
Star north;
north=“polaris”;
第二条语句将调用Star::operator=(const Star *)函数,使用Star::star(const char *)生成一个Star对象,该对象将被用作上述赋值运算符函数的参数。这里假设没有将char *赋给Satr的赋值运算符。
在带一个参数的构造函数原型中使用explicit将禁止进行隐式转化,但仍允许显示转换:
class Star
{
public:
explicit Star(const char *);
};
Star north;
north="polaris"; //not allowed
north=Star("polaris");//allowed
要将类对象转换为其他类型,应定义转换函数(第11章类的转换一节)。转化函数可以是没有参数的类成员函数,也可以是返回类型被声明为目标类型的类成员函数,即使没有声明返回的类型,函数也应返回所需的转换值,下面是一些示例:
Star ::Star double(){...}
Satr ::Star const char *() {...}
4.按值传递对象和传递引用