继承 - 如何在 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
时,您是在说B
和A
一起形成一个对象。所以B
部分和A
部分都需要构建。 A
部分是第一个构造的,然后是 B
部分,因此您会从每个构造函数中收到一条消息。
您是否正在尝试解决一些实际问题?有一种方法可以获得所需的输出,而不是通过“覆盖构造函数”
【参考方案1】:
您无法通过类设计获得所需的输出。在 C++ 中,所有基类构造函数都被调用,没有办法避免这种情况。我认为您问题的正确答案取决于您的最终目标。
【讨论】:
以上是关于继承 - 如何在 C++ 的继承类中只调用一个构造函数?的主要内容,如果未能解决你的问题,请参考以下文章