[英]Using the Parent constructor to initialize a child class
我想创建一个名为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。 在信息初始化时,将信息从孩子传递给父母肯定存在问题。
StartButton
只有一个构造函数:
StartButton(): Button(pos, text){};
它试图用垃圾初始化基本Button
。 你需要一个适当的StartButton
构造StartButton
:
StartButton(ofPoint _pos, string _text) : Button(_pos, _text) {}
或者,如果你能买得起C ++ 11,继承Button
的构造函数:
using Button::Button;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.