有些C ++语法的问题

时间:2014-09-13 18:18:50

标签: c++

    #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

3 个答案:

答案 0 :(得分:2)

A(int ii = 0) : i(ii) {}

是类 A 的构造函数,构造函数的值为ii,并将i初始化为ii

<强>输出

B b(10);
g(b);
g(20);

在此代码中,g(20)传递了类 B 的临时实例。

因为, B 类的构造函数不是explicit所以intB是正常的。

答案 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;
}