#include<iostream>
using namespace std;
class A {
public:
A(int ii = 0) : i(ii) {}
void show() { cout << "i = " << i << endl;}
private:
int i;
};
class B {
public:
B(int xx) : x(xx) {}
operator A() const { return A(x); }
private:
int x;
};
void g(A a)
{ a.show(); }
int main() {
B b(10);
g(b);
g(20);
getchar();
return 0;
}
在上面的代码中,任何人都可以解释该行的内容
A(int ii = 0) : i(ii) {}
意味着如何输出程序
i = 10
i = 20
答案 0 :(得分:2)
A(int ii = 0) : i(ii) {}
是类 A 的构造函数,构造函数的值为ii
,并将i
初始化为ii
。
<强>输出强>
B b(10);
g(b);
g(20);
在此代码中,g(20)
传递了类 B 的临时实例。
因为, B 类的构造函数不是explicit
所以int
到B
是正常的。
答案 1 :(得分:0)
这是将构造函数声明为class A
A(int ii = 0) : i(ii) {}
此部分声明构造函数可以使用单个int
参数,其默认值为0
。
A(int ii = 0)
这部分是使用参数i
中的值初始化成员变量ii
。
i(ii)
答案 2 :(得分:0)
A(int ii = 0) : i(ii) {}
是A类的构造函数,它接受一个参数ii
,它在初始化列表中被分配给i
。然后它的身体什么也没做。
等同于你:
A(int ii = 0) : i(ii) {
// do nothing
}
等效 - 在结果方面 - 你有:
A(int ii = 0) {
i = ii;
}