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

Using the Parent constructor to initialize a child class

本文关键字:子类 初始化 构造函数 Parent 使用      更新时间:2023-10-16

我想创建一个名为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和文本的值时。它打印字符串,但不打印位置。当信息初始化时,将信息从子项传递给父项肯定会出现问题。

StartButton只有一个构造函数:

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

其尝试用垃圾来初始化基础CCD_ 2。您需要一个合适的StartButton:构造函数

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

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

using Button::Button;