基类实例作为参数的派生类的构造方法

0 c++ constructor derived-class

我有这个代码:

#include <stdio.h>

class A
{
public:
    A() { printf("A::A()\n"); }
    A(const A &a) { printf("A::A(A &a)\n"); }
    A &operator=(const A &a) { printf("A::operator=\n"); }
};

class B : public A
{
public:
    B() { printf("B:B()\n"); }
    B(const A &a) : A(a) { printf("B::B(A &a)\n"); }
    B &operator=(const B &b) { printf("B::operator=\n"); }
};

int
main(int argc, char *argv[])
{
    printf(">> B b1\n");
    B b1;
    printf(">> b2 = b1\n");
    B b2 = b1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么该行B b2 = b1不调用构造函数B::B(const A &a)而是调用A::A(const A &a)?如何告诉编译器这样做?

Tom*_*mek 5

因为它调用B :: B(const B&a),它又调用A :: A(const A&a).而你在班上错过了B :: B(const B&a),所以你看不到它.