为什么它不起作用虽然A :: int i在B类中可见如果是这样那么为什么line1完全执行?
#include<iostream>
using namespace std;
class A{
public:
int i;
};
class B : public A{
public:
//B(int j){i=j;} //line 1
B(int j):i(j)
{
}
};
int main(){
return 0;
}
答案 0 :(得分:0)
class A{
public:
int i;
};
class B : public A{
public:
//B(int j){i=j;} //line 1
B(int j):i(j) // line 2
{}
};
默认初始值设定项列表只能用于初始化当前类的成员。在这种情况下(第2行),您正在初始化基类成员。
请看下面的代码:
int a;
a = 2;
int b = 3;
a
在语句中声明,并在另一个语句中赋值。然而,b被赋予一个值,而则被声明。
这正是默认初始化程序的工作原理。
class C
{
int c;
public:
C() { c = 5; }
};
class D
{
int d;
public:
D() : d(5) { }
};
在符号声明后为 c
分配值,而d
在其定义时获得值 。
答案 1 :(得分:0)
虽然从i
可以看到B
,但它不是其中一个数据成员,因此在B
的初始化列表中不可用。你可以做的是给A
一个构造函数并在A
的初始化列表中调用B
的构造函数:
#include<iostream>
using namespace std;
class A
{
public:
int i;
A(int i): i(i) {}
};
class B: public A
{
public:
//B(int j){i=j;} //line 1
B(int i): A(i) {} // call A's constructor
};
int main()
{
return 0;
}