C ++中的一般/特定帮助

时间:2014-10-31 12:14:14

标签: c++ class pointers virtual

所以我对C ++很新,但在C语言中有涉猎。但我不知道如何在私有/公共类中调用函数和变量。我已经尝试过研究指针,但我似乎无法理解如何使用指针来调用这些变量。给出的代码如下所示:

#include <cstdio>

class Thing
{
private:
    int x;
    int y;
    virtual int doStuff()
    {
        return x+y;
    }
    virtual int doStuff2()
    {
        return x*y;
    }
public:
    Thing(){
        x = 2;
        y = 10;
    }
};

int extractThing(void* thing)
{
//insert code here 
//return the value to be printed

}

int main()
{
    Thing thing;
    printf("%d\n", extractThing(&thing));
    return 0;
}

主要目标是显示thing.x,thing.y,thing.dostuff1()和thing.dostuff2() 我理解,因为“dostuff”函数是私有的,所以只有该类中的东西才能访问该数据。如果你能帮助我理解/引导我为这4个任务编写解决方案的正确方向,那就太棒了。谢谢

2 个答案:

答案 0 :(得分:0)

您希望dostuff1dostuff2public,以便您可以调用它们。您还希望public display成员函数显示xy,例如:

class Thing
{
private:
    int x;
    int y;
public:
    void display()
    {
            printf("%d, %d\n", x, y);
    }
    int doStuff()
    {
        return x+y;
    }
    int doStuff2()
    {
        return x*y;
    }
    Thing(){
        x = 2;
        y = 10;
    }
};

此外,没有理由拥有virtual个功能。

然后你可以:

int main()
{
    Thing thing;
    thing.dostuff();
    thing.dostuff2();
    thing.display();
    return 0;
}

答案 1 :(得分:0)

可以宣布extractThing Thing的朋友,这意味着它可以访问Thing的私有。在这种情况下,这可能不是最好的设计选择。

由于extractThing接受Thing实例作为参数,显然需要访问它的私有状态,因此没有理由不改为成员函数。< / p>

另一种选择是提供可以使用的Thing公共方法&#34;提取&#34;你需要什么,并使用extractThing中的那些。

作为旁注,您应该通过将void指针传递给extractThing来避免丢弃类型安全。