子类中的C ++构造函数

时间:2015-06-15 22:05:11

标签: c++ constructor polymorphism

我想将我的构造函数Buttom(string)从我的派生函数发送到我的基础中的函数setText(string),我试图这样做

Buttom(string) : setText(string text){}

...这给了我以下语法错误:

  

语法错误 - 在'text'之前预期的primary-expression - 类'Buttom'没有任何名为'setText'的字段

基类:

#include"RGB.h"
#include"Point.h"
#include"string"
using namespace std;
class Widget{
protected:
    RGB _backgroundColor,_textColor;
    Point _position;
    int _width,_heigth;
    string _text;
public:
    Widget();
    Widget(const Widget&);
    virtual ~Widget();
    void setBackgroundColor(const RGB&);
    RGB getBackgroundColor() const;
    void setTextColor(const RGB&);
    RGB getColor() const;
    void setPosition(const Point&);
    Point getPosition() const;
    void setWidth(int);
    int getWidth() const;
    void setHeigth(int);
    int getHeigth() const;
    void setText(string text);
    string getText() const;
    bool isPointInWidget(Point&) const;
    virtual void draw() const = 0;
    virtual Widget& operator=(const Widget&) = 0;
    virtual bool operator==(const Widget&) = 0;

};

派生类:

#include"string"
#include"Widget.h"
class Buttom : public Widget{
public:
    Buttom();
    Buttom(string);
    Buttom(const Buttom&);
    ~Buttom();
    void draw() const;
    Widget& operator=(const Widget&);
    bool operator==(const Widget&);

};

1 个答案:

答案 0 :(得分:4)

Buttom(string) : setText(string text){}

使用类成员初始化列表,不能以这种方式调用类成员函数。

您可以在构造函数体中调用它,如下所示:

Buttom(string s) : Widget() { 
    setText(s); 
}