2

我有一个 Rectangle 类和一个 Square 类,它们在构造函数中都有相同的参数(名称、宽度、高度)

所以我想创建一个名为 Shape 的 Base 类,并在 Shape.h 中定义构造函数,让 Rectangle 类和 Square 类从 Shape 类继承构造函数。

我面临的问题是,我真的不知道如何将构造函数从 Shape 类继承到 Rectangle 和 Square 类。

如果我问一个简单的问题,请原谅我,因为我还是 C++ 新手。

形状.h

#include <iostream>
#ifndef Assn2_Shape_h
#define Assn2_Shape_h


class Shape {

public:
 Shape() {
     name = " ";
     width = 0;
     height = 0;
 }

Shape(std::string name, double width, double height);

private:
    std::string name;
    double width,height;
};
#endif

矩形.h

#include <iostream>
#ifndef Assn2_Rectangle_h
#define Assn2_Rectangle_h


class Rectangle : public Shape {
//how to inherit the constructor from Shape class?
public:
 Rectangle() {

 }

private:

};
#endif

平方.h

#include <iostream>
#ifndef Assn2_Square_h
#define Assn2_Square_h


class Square: public Shape {
//how to inherit the constructor from Shape class?
public:
   Square() {

    }

private:

};
#endif
4

2 回答 2

4

是的,您可以从基类继承构造函数。这是一个全有或全无的操作,您无法选择:

class Rectangle : public Shape 
{
  //how to inherit the constructor from Shape class?
 public:
  using Shape::Shape;
};

这隐式定义了构造函数,就好像它们在派生类型中一样,允许您Rectangles像这样构造:

// default constructor. No change here w.r.t. no inheriting
Rectangle r; 

// Invokes Shape(string, double, double)
// Default initializes additional Rectangle data members
Rectangle r("foo", 3.14, 2.72); 

这是 C++11 功能,编译器支持可能会有所不同。最新版本的 GCC 和 CLANG 支持它。

于 2013-11-01T06:11:31.327 回答
2

您似乎在问如何调用它们而不是“继承”它们。答案是 : 语法:

Rectangle() : Shape() {
// ...
}

每种情况下的参数列表都是您需要的

于 2013-11-01T05:59:16.653 回答