对象的C ++调用方法,对象本身作为参数

时间:2018-05-15 13:03:22

标签: c++ oop methods openframeworks

在python中,您可以调用array.sort(),它将对调用它的数组进行排序。但是,我现在有以下代码片段

void drawClickableRectangle(ClickableRectangle recto){
        ofSetHexColor(0xffffff);             // just some syntax from the library I'm using
        ofFill();
        ofDrawRectangle(recto.xpos, recto.ypos, recto.width, recto.height);
    }

然后在这里调用此方法:

ClickableRectangle recto(1,1,100,100);
recto.drawClickableRectangle(recto);

这是完整的课程:

class ClickableRectangle
{
    // Access specifier
public:


    // Data Members
    int xpos, ypos, width, height;
    ClickableRectangle(int x1, int y1, int width1, int height1){
        xpos = x1;
        ypos = y1;
        width = width1;
        height = height1;
    };
    // Member Functions()
    int getxpos()
    {
        return xpos;
    }
    int getypos(){
        return ypos;
    }
    int getwidth(){
        return width;
    }
    void drawClickableRectangle(ClickableRectangle recto){
        ofSetHexColor(0xffffff);
        ofFill();
        ofRect(recto.xpos,recto.ypos, recto.width, recto.height);
        //ofDrawRectangle(recto.xpos, recto.ypos, recto.width, recto.height);
    }

有没有办法让函数调用“反身”?所以我可以称之为:

recto.drawClickableRectange();

我对C ++比较陌生,但不是一般的编程。谢谢!

2 个答案:

答案 0 :(得分:1)

你可以在C ++中这样做:

class ClickableRectangle {

    public int xpos;
    public int ypos;
    public int width;
    public int height;

    void drawClickableRectangle(){
        ofSetHexColor(0xffffff);             // just some syntax from the library I'm using
        ofFill();
        ofDrawRectangle(xpos, ypos, width, height);
    }
}

然后在你的main函数中,这样调用它:

int main(){

    ClickableRectangle recto;
    recto.xpos = 1;
    recto.ypos = 1;
    recto.width = 100;
    recto.height = 100;
    recto.drawClickableRectange();
    return 0;
}

答案 1 :(得分:0)

与python不同,没有。

在python中,你可以

def unattached(fake_self):
    return fake_self.x

class Thing:
    def __init__(self):
        self.x = 42

Thing.method = unattached

thing = Thing()
print (thing.method())
print (unattached(thing))

因为具有显式第一参数的自由函数与具有隐式第一参数的实例方法之间没有区别。

在C ++中,您无法在运行时更改class,并且成员函数与自由函数的类型不同。

struct Thing {
    int x = 42;
    int method() const { return this->x; }
}

int unattached(const Thing * thing) { return thing->x; }

unattached的类型为int (*)(const Thing *),而methodint (const Thing::*)()。这些是不同的类型,您不能为另一个切换。你可以 中构建std::function<int(const Thing *)>,但你只能使用自由函数语法func(thing),因为它不是&# 39; Thing

的成员