使用Parent构造函数初始化子类

时间:2014-09-14 21:19:15

标签: c++ inheritance polymorphism openframeworks

我想创建一个名为Button的通用类,其他人继承,所以例如我可以有StartButton,ContinueButton等。无论我想从构造函数开始的不同属性都有某些值,因为它们会总是需要所以我建立了我自己的Button类:

#pragma once
#include "ofMain.h"

class Button {

 public:

  Button(ofPoint _pos, string _text);
  virtual void setup();
  virtual void update();
  virtual void draw();


 protected:
  ofTrueTypeFont buttonName;
  ofPoint pos;
  string text, fontName;
  bool isClicked;
  int buttonFader, buttonFaderVel;

};

这是Button.cpp的实现:

#include "Button.h"

Button::Button(float _pos, string _text): pos(_pos), text(_text){

  cout << pos << endl;
  cout << text << endl;
}

void Button::setup(){

 fontSize = 19;
 fontName = "fonts/GothamRnd-Medium.otf";
 buttonName.loadFont(fontName, fontSize);

 cout << text << endl;

}

void Button::update(){

}

void Button::draw(){

 ofSetColor(255);
 buttonName.drawString(text, pos ,pos);
}

现在,当我创建第一个子对象时,我会执行以下操作:

#include "Button.h"

class StartButton: public Button{

public:

 StartButton(ofPoint _pos, string _text): Button(_pos, _text){};//This is how I use the parent's constructor

};

现在在我的main.cpp中。我想因为我在创建类时使用了父的构造函数,我可以像这样使用父类的构造函数:

int main {
  StartButton *startButton;
  ofPoint pos = ofPoint(300,300);
  string text = "Start Button"
  startButton = new StartButton(text, pos); 
}

出于某种原因,当我运行它并在Button类中打印pos和text的值时。它打印字符串但不打印pos。当信息初始化时,确实存在将信息从孩子传递给父母的问题。

1 个答案:

答案 0 :(得分:3)

StartButton只有一个构造函数:

StartButton(): Button(pos, text){};

尝试使用垃圾初始化基础Button。您需要StartButton的正确构造函数:

StartButton(ofPoint _pos, string _text) : Button(_pos, _text) {}

或者如果你能负担得起C ++ 11,那么从Button继承构造函数:

using Button::Button;