从基类继承构造函数?

时间:2013-11-01 05:51:20

标签: c++

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

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

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

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

Shape.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

Rectangle.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

Square.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

2 个答案:

答案 0 :(得分:4)

是的,你可以inherit constructors from a base class。这是一个全有或全无的操作,你无法挑选:

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支持它。

答案 1 :(得分:2)

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

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

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