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

请问:调用构造函数有关问题

2012-05-11 
请教:调用构造函数问题C/C++ codeclass B{public:B(){cout constructor endl}~B(){cout deco

请教:调用构造函数问题

C/C++ code
class B{public:B(){   cout << "constructor" << endl;}~B(){   cout << "deconstructo" << endl;}B(int i) : data(i){   cout << "constructor by parameter " << data;}private:int data;};B Play(B b){return b;}int main(int argc, char *argv[]){B t1 = Play(5);  //这里为什么可以传5B t2 = Play(t1);return 0;}


[解决办法]
因为 Play 这个方法需要一个 B 对象,B 有一个参数是 int 型的构造函数,隐式地将 int 型 5 转换成了 B 类型的对象。
[解决办法]
C/C++ code
#include <iostream>using std::cout;using std::endl;class B {public:    B() {        cout << "constructor" << endl;    }    ~B() {        cout << "deconstructo" << endl;    }    explicit B(int i) :            data(i) {        cout << "constructor by parameter " << data;    }private:    int data;};B Play(B b) {    return b;}int main(int argc, char *argv[]) {    B t1 = Play(5); //这里为什么可以传5    B t2 = Play(t1);    return 0;}
[解决办法]
《C++ Primer》(英文版,第4版) p. 461提到:
A constructor that can be called with a single argument defines an implicit conversion from the parameter type to the class type.

(如果一个类的构造函数只接收一个实参(argument),那么就定义了一个从形参(parameter)数据类型到类的类型的隐式转换。) 

详情请参考:
隐式类型转换和explicit关键字的作用

热点排行