【发布时间】:2017-01-17 17:40:31
【问题描述】:
我一直认为基类的构造函数/析构函数/友元不会被派生类继承。此链接证实了这一点: http://www.geeksforgeeks.org/g-fact-4/.
我还知道我们可以在派生类初始化列表的初始化列表中编写基类构造函数。
话虽如此:我今天试着检查一下我的技能。但是我没能猜到这个程序的输出。
#include<iostream>
class A {
int x, y;
public:
A(int a = 0, int b = 0) : x(a), y(b) {
std::cout << "A ctor called" << std::endl;
}
void print_A() {
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
};
class B : public A {
int z;
public:
// I knew that A member can be initilized like this.
B(int a = 0, int b = 0, int c = 0) : z(a), A(b, c) {
std::cout << "C ctor called" << std::endl;
// I was not aware about that.
A(b, c);
}
void print_B() {
std::cout << "z = " << z << std::endl;
}
};
int main() {
B b(1, 2, 3);
b.print_A();
b.print_B();
}
输出:
A ctor called
C ctor called
A ctor called
x = 2
y = 3
z = 1
几个问题:
如果构造函数/析构函数/友元不是从基类继承的,那么类“B”如何能够在此处访问类“A”的构造函数。
你是怎么得到这个输出的? 'A' 的两个构造函数怎么被调用了。
【问题讨论】:
标签: c++ constructor