C++中的通用/特定帮助

General/Specific Assitance in C++

本文关键字:帮助 C++      更新时间:2023-10-16

所以我对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("%dn", extractThing(&thing));
    return 0;
}

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

您希望dostuff1dostuff2public,以便可以调用它们。您还需要一个public display成员函数来显示xy,类似于:

class Thing
{
private:
    int x;
    int y;
public:
    void display()
    {
            printf("%d, %dn", 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;
}

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

由于extractThing无论如何都接受Thing实例作为参数,并且显然需要访问它的私有状态,因此没有什么理由不创建成员函数。

另一种选择是为Thing提供可以使用的公共方法,从中"提取"您需要的内容,并在extractThing中使用这些方法。

附带说明一下,您可能应该通过将void指针传递给extractThing来避免丢弃类型安全性。