继承C ++为啥不调用父亲构造函数[重复]
Posted
技术标签:
【中文标题】继承C ++为啥不调用父亲构造函数[重复]【英文标题】:inheritance C++ why father constructor is not evoked [duplicate]继承C ++为什么不调用父亲构造函数[重复] 【发布时间】:2020-08-06 09:40:33 【问题描述】:我只是想测试一个继承模式,但似乎我缺乏一些理解。我认为应该唤起父类的构造函数。一些方向表示赞赏
#include <stdio.h>
#include <iostream>
#include <memory>
template<class Gender, class Race, class ChildType>
class Father
public:
Father()
std::cout << "var = " << ChildType::var << std::endl;
;
;
class Male
public:
;
class Vietnam
public:
;
class Worker
public:
;
class Child : public Father<Male, Vietnam, Child>
public:
static int var;
;
int Child::var(10);
int main()
std::shared_ptr<Father<Male, Vietnam, Child>> child(Child());
return 1;
【问题讨论】:
最麻烦的解析。 无论如何,不清楚你期望child(Child())
做什么,即使它做了你认为的......shared_ptr
需要一个动态分配的实例,而不是一个值,你应该使用@ 987654324@ 得到那个。
我想我也说到点子上了。 Shared_ptr 需要在某处进行实例初始化
so... Child() 单独不是实例化吗?我刚刚尝试过 new Child() 并且它确实初始化了一个实例。顺便谢谢你的回答
@TSL_:shared_ptr
需要一个指针进行初始化。 make_shared
创建一个 shared_ptr
实例,并使用指向动态分配对象的指针进行初始化。
【参考方案1】:
此代码声明了一个名为 child
的函数,它返回一个 shared_ptr
,这不是您所希望的:
std::shared_ptr<Father<Male, Vietnam, Child>> child(Child());
你可以用这个来修复它:
auto p = make_shared <Father<Male, Vietnam, Child>>();
【讨论】:
是的..我明白了。感谢您的帮助以上是关于继承C ++为啥不调用父亲构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章