【问题标题】:How to return a class in a function with C++?如何使用 C++ 在函数中返回一个类?
【发布时间】:2013-08-29 23:35:27
【问题描述】:
我正在使用SFML,我想返回我认为是一个类的东西。所以我想获取有效载荷并返回它。当payload 是一个班级时,我该怎么做?
sf::Packet payload;
我该如何退货?
/**
* Gets the payload.
*/
int LoginPacket::getPayload() {
return payload;
}
我尝试的每一种方法都会出错。我必须使用指针吗?仅仅是因为有效载荷被识别为一个类并且编译器告诉我无法将其转换为int?那么我该如何转换它或者我该怎么做呢?
【问题讨论】:
标签:
c++
return
getter
getter-setter
【解决方案1】:
你希望函数返回什么?如果你想让它返回一个 int,这个 int 是什么意思?它是您要检索的数据包中的字段吗?如果你想退回整个数据包,你可以这样做。
sf::Packet& LoginPacket::getPayload()
{
return payload;
}
函数的调用者可以编辑有效负载,或者复制它,如果他们愿意的话。您可以通过添加 const 将其设为只读
const sf::Packet& LoginPacket::getPayload() const
{
return payload;
}
【解决方案2】:
让我们看看c++中的函数声明是什么。
[返回类型] [函数名](参数);
您是在告诉编译器,当它计算函数内部的表达式时,它将返回您为 [返回类型] 确定的内容。
在你的函数中,你告诉编译器期待一个 int,然后你给它一个 sf::Packet。
如果要返回一个类,则需要将该类设置为函数的返回类型:
sf::Packet LoginPacket::getPayload() {
return payload;
}
现在,这将发送有效负载的副本,正如 Neil 所展示的,如果您想返回对数据包的引用(以便我们可以使用相同的数据包而无需不必要地复制它),那么您会想要使用他的功能:
sf::Packet& LoginPacket::getPayload() {
return payload;
}
如果要返回 sf::Packet 的成员,则需要将返回类型设置为该成员,然后返回 payload.member;