将一个整数分配给一个对象。输出结果是什么?
Allocating an integer to an object. What will be the output?
#include <iostream>
using namespace std;
class A{
public:
A(){
cout<<"a";
}
A(int x){
cout<<"x";
}
};
class B: public A{
public:
B(A ){
cout<<"b";
}
};
int main()
{
B b(10);
return 0;
}
B 的构造函数如何接受整数值?
为什么先调用 A 的参数化构造函数,然后调用默认构造函数?
由于 B
的构造函数采用 A
对象,而 A
对象可以从整数构造,编译器将调用 A(int)
来构造传递给 B 的构造函数的参数。这将导致输出 "x"。由于 B 的构造函数没有为 A
基 class 提供初始化器,因此基 class 将被默认构造。这将输出 "a"。然后执行B的构造函数体,导致输出"b"。
我无意无礼,但为了您的代码,请不要做这种乱七八糟的事情。
首先,您需要学习如何正确缩进和 space 您的代码。
class B: public A
{
public:
B(A )
{
cout<<"b";
}
};
当您像这样编写代码时,它的可读性会提高很多。 (见这篇文章:http://lazyfoo.net/articles/article02/index.php)
现在,回答您的问题:
1) class B 的构造函数以一个 A 对象作为参数(你只忘了命名你的变量 B( A foo ){...}
)。
2) 当您将 10 作为参数传递时,您是在进程 A foo(10)
或此 A foo = A(10)
中执行此操作。这就是第一个 x
.
的解释
3) 下面的a
来自A的默认构造函数而b
来自B的构造函数,讽刺的是,第一个被调用。
#include <iostream>
using namespace std;
class A{
public:
A(){
cout<<"a";
}
A(int x){
cout<<"x";
}
};
class B: public A{
public:
B(A ){
cout<<"b";
}
};
int main()
{
B b(10);
return 0;
}
B 的构造函数如何接受整数值? 为什么先调用 A 的参数化构造函数,然后调用默认构造函数?
由于 B
的构造函数采用 A
对象,而 A
对象可以从整数构造,编译器将调用 A(int)
来构造传递给 B 的构造函数的参数。这将导致输出 "x"。由于 B 的构造函数没有为 A
基 class 提供初始化器,因此基 class 将被默认构造。这将输出 "a"。然后执行B的构造函数体,导致输出"b"。
我无意无礼,但为了您的代码,请不要做这种乱七八糟的事情。
首先,您需要学习如何正确缩进和 space 您的代码。
class B: public A
{
public:
B(A )
{
cout<<"b";
}
};
当您像这样编写代码时,它的可读性会提高很多。 (见这篇文章:http://lazyfoo.net/articles/article02/index.php)
现在,回答您的问题:
1) class B 的构造函数以一个 A 对象作为参数(你只忘了命名你的变量 B( A foo ){...}
)。
2) 当您将 10 作为参数传递时,您是在进程 A foo(10)
或此 A foo = A(10)
中执行此操作。这就是第一个 x
.
3) 下面的a
来自A的默认构造函数而b
来自B的构造函数,讽刺的是,第一个被调用。