继承 - 如何在 C++ 的继承类中只调用一个构造函数?

Posted

技术标签:

【中文标题】继承 - 如何在 C++ 的继承类中只调用一个构造函数?【英文标题】:Inheritance - How to call just one constructor in inherited class in C++? 【发布时间】:2021-06-23 14:13:24 【问题描述】:

我用简单的构造函数创建了类“A”,它在屏幕上打印了一条简单的消息:

A.hpp:

class A 
    public:
        A();
;

A.cpp:

#include "A.hpp"
#include <iostream>

A::A() 
    std::cout << "From the class A." << std::endl;

以及从“A”继承的第二个类“B”:

B.hpp:

#include "A.hpp"
class B : public A
    public:
        B();
;

B.cpp

#include "B.hpp"
#include <iostream>

B::B() 
    std::cout << "From the class B." << std::endl;

当我尝试创建“B”类的实例时,我得到了输出:

From the class A.
From the class B.

那么,我怎样才能覆盖构造函数以使其仅打印From the class B.

【问题讨论】:

这是不可能的。将调用每个基类的一个构造函数。 这是不可能的,C++ 不能这样工作。 这能回答你的问题吗? Why do we not have a virtual constructor in C++? 当您编写class B : public A 时,您是在说BA 一起形成一个对象。所以B 部分和A 部分都需要构建。 A 部分是第一个构造的,然后是 B 部分,因此您会从每个构造函数中收到一条消息。 您是否正在尝试解决一些实际问题?有一种方法可以获得所需的输出,而不是通过“覆盖构造函数” 【参考方案1】:

您无法通过类设计获得所需的输出。在 C++ 中,所有基类构造函数都被调用,没有办法避免这种情况。我认为您问题的正确答案取决于您的最终目标。

【讨论】:

以上是关于继承 - 如何在 C++ 的继承类中只调用一个构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

C++提高:继承

C++提高:继承

c++继承总结

第六章 面向对象(高级篇)

C++继承中的构造和析构

为啥 C++ 构造函数在继承中需要默认参数?