Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否在为多重继承插入基类和超类? 所以我想在C++中总结一下多重继承的思想。在过去的几个小时里,我一直在做一些家庭作业,遇到了一个路障,这与MI有关。所以我有一个包类,这些东西都是从中继承的字母箱子板条箱板条箱可以选择是金属板条箱或木板条箱我的问题是:板条箱类内部需要什么?_C++_Inheritance_Multiple Inheritance - Fatal编程技术网

我是否在为多重继承插入基类和超类? 所以我想在C++中总结一下多重继承的思想。在过去的几个小时里,我一直在做一些家庭作业,遇到了一个路障,这与MI有关。所以我有一个包类,这些东西都是从中继承的字母箱子板条箱板条箱可以选择是金属板条箱或木板条箱我的问题是:板条箱类内部需要什么?

我是否在为多重继承插入基类和超类? 所以我想在C++中总结一下多重继承的思想。在过去的几个小时里,我一直在做一些家庭作业,遇到了一个路障,这与MI有关。所以我有一个包类,这些东西都是从中继承的字母箱子板条箱板条箱可以选择是金属板条箱或木板条箱我的问题是:板条箱类内部需要什么?,c++,inheritance,multiple-inheritance,C++,Inheritance,Multiple Inheritance,板条箱.h #ifndef CRATE_H #define CRATE_H #include "package.h" class Crate: public Package{ public: Crate(); Crate(double price, int weight, int trackingNumber); double cost(); }; #endif class Package{ protected: double price; int weight;

板条箱.h

#ifndef CRATE_H
#define CRATE_H

#include "package.h"

class Crate: public Package{
public:
  Crate();
  Crate(double price, int weight, int trackingNumber);

  double cost();
};

#endif
class Package{

protected:
  double price;
  int weight;
  int trackingNumber;

public:
  Package();
  Package(double price, int weight, int trackingNumber);

  void setWeight(int weight);
  void setPrice(int price);
  void setTrack(int track);
  double getPrice();
  int getWeight();
  int getTrack();

  virtual double cost() = 0;
  ~Package();
};
class MetalCrate: public Crate, public Package{
public:
  MetalCrate();
  MetalCrate(double price, int weight, int trackingNumber);

  double cost();
};
Cost是包中的一个虚拟函数,所有类都有自己的实现<代码>我不应该定义我在板条箱类中的包中定义的所有公共变量正确吗?我一直在网上阅读资料,似乎无法理解板条箱课程中需要的东西

Package.h

#ifndef CRATE_H
#define CRATE_H

#include "package.h"

class Crate: public Package{
public:
  Crate();
  Crate(double price, int weight, int trackingNumber);

  double cost();
};

#endif
class Package{

protected:
  double price;
  int weight;
  int trackingNumber;

public:
  Package();
  Package(double price, int weight, int trackingNumber);

  void setWeight(int weight);
  void setPrice(int price);
  void setTrack(int track);
  double getPrice();
  int getWeight();
  int getTrack();

  virtual double cost() = 0;
  ~Package();
};
class MetalCrate: public Crate, public Package{
public:
  MetalCrate();
  MetalCrate(double price, int weight, int trackingNumber);

  double cost();
};
金属板条箱.h

#ifndef CRATE_H
#define CRATE_H

#include "package.h"

class Crate: public Package{
public:
  Crate();
  Crate(double price, int weight, int trackingNumber);

  double cost();
};

#endif
class Package{

protected:
  double price;
  int weight;
  int trackingNumber;

public:
  Package();
  Package(double price, int weight, int trackingNumber);

  void setWeight(int weight);
  void setPrice(int price);
  void setTrack(int track);
  double getPrice();
  int getWeight();
  int getTrack();

  virtual double cost() = 0;
  ~Package();
};
class MetalCrate: public Crate, public Package{
public:
  MetalCrate();
  MetalCrate(double price, int weight, int trackingNumber);

  double cost();
};
这就是我的课的样子。请帮忙,先谢谢你

metalcrate.h:16:7:警告:由于不明确[默认启用]类metalcrate[公共板条箱,公共虚拟包],无法在“metalcrate”中访问直接基“包”{这是我在尝试编译时遇到的错误。我正在尝试让我的木/金属板条箱从板条箱和包继承


讨论被转移到一个聊天室,在那里,我们以更为详细的方式解释了一些事情

构建代码的方法有很多种,但就面向对象的设计而言,通常最好不要在基类中包含任何状态或实现,而只在最终的具体类中包含状态和实现一个原因是,常见的情况是,实现与基类所考虑的实现集有很大的不同,因此基类使用的存储不适合于特定的实现。另一个原因是,在基类中提供实现可能会带来额外的不变量以及对实现的约束,这些约束可能是实现不知道的或容易打破的

简言之,一种更好的组织方式是:

class Package {
  public:
    virtual ~Package();
    virtual double getPrice() const = 0;
    virtual int getWeight() const = 0;
    virtual int getTrack() const = 0;
    virtual double cost() const = 0;

  protected:
    Package();
};

然后,创建一个单独的类来封装公共元素(或者创建一个“AbstractPackage”,包的其他实例可以选择从中继承)。这使您可以创建一个包的实现,如果它不适用于某些替代实现,则该包不附带默认实现/变量的额外负担。此外,即使对于您的“抽象包”,也不应将变量设置为“受保护”或“公共”所有成员变量都应该是“私有的”(如果派生类需要访问,请考虑一个“受保护的”访问器)

使用C++多重继承的最好方法是避免它的完整性,你能把问题弄得更清楚吗?我很乐意回答,但我不确定你到底问的是什么。多重继承在哪里?<代码> CRATE < /C>只有一个父类。@ Prdhan-OOP我忘了加上我的金属箱类。实际上我甚至不确定O。n如何正确设置金属板条箱类。那么我应该使用子类内部的设置器,比如字母或盒子来设置重量和价格等?还是使用“AbstractPackage”的基本构造函数您还应该考虑在构造之后这些值是否需要可变;在可能的情况下,在构建时提供这样的配置通常更好/更干净,然后一旦对象被成功创建,就使得状态不变,尽管这确实取决于您的使用/应用的更多细节。