注册 登录
编程论坛 C++教室

参数可以这样传递?

xxcc309 发布于 2009-10-08 07:58, 995 次点击
#include<iostream>
using namespace std;

class B
{
public:
    B()
    {
        cout<<"default constructor"<<endl;
    }
    ~B()
    {
        cout<<"destructed"<<endl;
    }
    B(int i):data(i)
    {
        cout<<"constructed by parameter" << data <<endl;
    }
private:
    int data;
};
B Play( B b)
{
    return b ;
}
int main(int argc, char* argv[])
{
    B temp = Play(5);
    return 0;
}
此程序中我对
B Play( B b)
{
    return b ;
}
int main(int argc, char* argv[])
{
    B temp = Play(5);
    return 0;
}
红色参数部分很疑惑,为什么直接可以传5进来?
13 回复
#2
xxcc3092009-10-08 08:20
等待中。。。
#3
xxcc3092009-10-08 08:39
如果可以的话,请解释下
B Play( B b)
{
    return b ;
}
这个函数,先谢过了。
#4
xxcc3092009-10-08 09:59
没人解答。。版主大哥看来需要您出马了。。
#5
无诲今生2009-10-08 10:17
红色参数,实际上当运行时,已经把5隐式的转换成B的对象,整型转换成对象可以隐式的转换,但对象转换成其它类型要显式的转换。
B Play( B b)  
{  
    return b ;  
}   这个函数表示:返回类型是一个对象,参数也是一个对象
#6
pangding2009-10-08 10:57
回复 4楼 xxcc309
呵呵,就是楼上说的。

程序调用了
    B(int i):data(i)
    {
        cout<<"constructed by parameter" << data <<endl;
    }
这个函数。

你琢磨一下程序的输出,应该可以想明白的~
#7
xxcc3092009-10-08 14:38
程序的输出我可以理解,问题在
B Play( B b)   
{   
    return b ;   
}
这个函数,5是怎样被隐式转化的?能不能具体一点讲下,谢谢。
#8
pangding2009-10-08 16:08
回复 7楼 xxcc309
B(int i)
这个函数不是可以把一个 int 初始化成 B 这个类吗,然后再把它创建的对象传给 Play(B b) 做为参数。
#9
最左边那个2009-10-08 18:29
具体我想应该是这样的吧,当读到Play(5)是,后台发现5是整型,而函数定义的是B类,那么后台就隐式调用了转换函数,将整型实参转换成形参指定的B类型!这一切都是隐式进行的,当然你也可以显式调用
#10
xxcc3092009-10-09 16:51
谢谢大家的帮忙,这个问题我明白了。
#11
Chost2009-10-09 20:57
回复 9楼 最左边那个
我想问一下:B temp=play(5);
      5隐式转换成B的对象,但为什么调用的是B(int i)这个构造函数对它进行初始化,而不是调用的B()这个函数呢?
#12
pangding2009-10-11 08:34
回复 11楼 Chost
它要把5转成B。当然得挑一个合适的构造函数了。
#13
最左边那个2009-10-11 09:44
以下是引用pangding在2009-10-11 08:34:17的发言:

它要把5转成B。当然得挑一个合适的构造函数了。
支持....
#14
lyqmath2009-10-11 21:54
1、输入5,函数接收的参数类型是B,将5进行强制类型转换;
2、默认调用了B的第二个构造函数,转化成了B,且对应输入参数就是5;
1