继承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 ++为啥不调用父亲构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥隐式复制构造函数调用基类复制构造函数而定义的复制构造函数不调用?

为啥在malloc中不调用构造函数? [复制]

为啥在malloc中不调用构造函数? [复制]

为啥并不总是有默认构造函数[重复]

C++:调用无参数的构造函数为啥不加括号

为何需要虚函数 直接对象名加作用域来调用子类父类爷类的函数不就行了 为啥