我很新C++
,但我来自Java
背景,所以我理解大部分OOP
概念。我正在阅读介绍性指南,并遇到了这个例子:
[Foo.H]
class A
{
public:
A(int something);
};
class B : public A
{
public:
B(int something);
};
[Foo.C]
#include "Foo.H"
A::A(int something)
{
printf("Something = %d\n", something);
}
B::B(int something) : A(something)
{
}
假设通过传递A(something)
给它的初始值设定项列表B::B(int something)
类似于super
java 中的关键字是否正确——也就是说,它将执行A::A(int something)
's 代码?另外,为什么我只调用A(something)
而不是A::A(something)
从初始化列表中调用?
基本上我在问:上面是否等同于:
B::B(int something)
{
A::A(something)
}
让我扩展我为什么感到困惑。
如果我要使用:
B::B(int something) : A(something)
{
int x = 5;
printf("x = %d", x);
}
并通过调用代码
B::B(7);
这是打印出来x = 5
还是something = 7
先打印出来?为什么它会按这个顺序执行?
我只是对语法有点困惑,即使在这个简单的示例中,也很难掌握和可视化发生的继承。