当前位置:  开发笔记 > 编程语言 > 正文

没有为child-c ++存在默认构造函数

如何解决《没有为child-c++存在默认构造函数》经验,为你挑选了1个好方法。

当我包含child.h并生成一个子变量时,它说没有为子项存在默认构造函数?顺便说一句是这样的:

Child::Child(const Child& otherChild) {
    this->name = otherChild.GetName();
}  

制作复制构造函数的正确方法.我可以将指针传入此复制构造函数吗?或者如果我想传入一个指针,它应该是这样的:

Child::Child(const Child *otherChild) {
    this->name = otherChild->GetName();
}  

父:

#pragma once

#include 
#include 
#include "Child.h"

using namespace std;

class Parent {
public:
    Parent(string name);
    Parent(const Parent& otherParent);
    friend ostream& operator<<(ostream & os, const Parent& parent);
    Parent operator=(const Parent& otherParent) const;
    string GetParentName() const;
    Child GetChild() const;

private:
    string name;
    Child myChild;

};

CPP:

#include "Child.h"

Child::Child(string name) {
    this->name = name;
}

Child::Child(const Child& otherChild) {
    this->name = otherChild.GetName();
}

string Child::GetName() const
{
    return name;
}

标题:

#pragma once

#include 
#include 

using namespace std;

class Child {
public:
    Child(string name);
    Child(const Child& otherChild);
    string GetName() const;

private:
    string name;
};

David Grayso.. 5

所述Child类只能通过提供参数给一个构造函数来构造; 你还没有提供没有参数的"默认构造函数".因此,Parent类的每个构造函数都需要提供参数来初始化其Child成员.您需要在构造函数的主体实际开始运行之前执行此操作,因此C++具有特殊的语法.它看起来像这样:

Parent::Parent(std::string name)
  : myChild("childname")
{
}

您可能想重新考虑您的类结构,因为它现在的方式,每个Parent对象必须有一个Child; 你真的没办法表达没有孩子的父母.



1> David Grayso..:

所述Child类只能通过提供参数给一个构造函数来构造; 你还没有提供没有参数的"默认构造函数".因此,Parent类的每个构造函数都需要提供参数来初始化其Child成员.您需要在构造函数的主体实际开始运行之前执行此操作,因此C++具有特殊的语法.它看起来像这样:

Parent::Parent(std::string name)
  : myChild("childname")
{
}

您可能想重新考虑您的类结构,因为它现在的方式,每个Parent对象必须有一个Child; 你真的没办法表达没有孩子的父母.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有