类类型中的访问器函数未从 C++ 中的私有数据返回正确的值
accessor function in class type not returning proper values from private data in c++
我目前有一个与扑克相关的comp sci项目。我有一个名为 Card 的类,我的构造函数工作正常,但我不确定在尝试打印卡片详细信息时我是否正确访问了我的私人数据。
卡片存储为typedef enum (Invalid, Diamonds, Clubs... ) cSuit
构造函数将数据输入私有数据变量cSuit m_suit
;
我有 3 个成员函数 1 是Card::cSuit Card::suit
(返回西装)
Card::cPoints Card::points
(返回卡的点)和Void Card::print
(可以很好地打印卡片)
当我打印出卡片时,它们都显示为无效。我在整个代码中使用了cout来查看问题所在,我认为在我的打印函数中,任何建议都值得赞赏。
#include <iostream>
#include "card.h"
using namespace std ;
// Default constructor marks card as invalid //
Card::Card() { m_suit = Invalid ; m_points = 0 ; }
Card::Card(cSuit s, cPoints p) {
// your code goes here
if (s >=1 && s <=4){
m_suit = s ; } else {
m_suit = Invalid;
m_points = 0; } if (p >=2 && p <=14){
m_points = p; } else {
m_points = 0 ;
m_suit = Invalid; } }
Card::cPoints Card::points() {
// your code goes here
cPoints cardPoints; cardPoints = m_points; return cardPoints; }
Card::cSuit Card::suit() {
// your code goes here
cSuit cardSuit; cardSuit = m_suit; return cardSuit; }
void Card::print() {
// your code goes here
Card cardPoint; Card cardSuits;
if (cardPoint.points() >=2 && cardPoint.points() <= 10){
cout << cardPoint.points() << " of " << cardSuits.suit() << endl; } if (cardPoint.points() == 11){
cout << "Jack of " << cardSuits.suit() << endl; } if (cardPoint.points() == 12){
cout << "Queen of " << cardSuits.suit() << endl; } if (cardPoint.points() == 13){
cout << "Kind of " << cardSuits.suit() << endl; } if (cardPoint.points() == 14) {
cout << "Ace of " << cardSuits.suit() << endl;} else {
cout << "Invalid card" << endl; } }
打印我的卡片的正确方法是什么。
如果我没有正确地提出我的问题,请给我提示,因为不幸的是,我上次问我的问题没有得到很好的接受。
在打印方法的开头,声明两个变量,cardPoint 和 cardSuits,稍后用于打印信息。问题是,您使用默认构造函数创建它们,并且它们与要调用 print() 的卡没有任何关系。如果不看到卡片类的其余部分,我就无能为力,所以如果您需要更多解释,则必须发布整个类代码。
>cardSuits
和cardPoints
是默认初始化的本地对象,因此仅存在于函数中。
您想要访问实际成员。您可以通过编写this->(name_of_member)
来执行此操作。此成员可以是公共的、受保护的或私有的,没关系。这个成员可以是成员函数(this->function()
)或数据成员(this->data
)。编写this->
是可选的,但会明确您的意图。
所以在任何地方,你写cardPoint.(...)
或cardSuit.(...)
,试着写this->(...)
。
现在我看到了更多的代码,我可以说更多。要打印卡片,您应该从 print() 函数中删除Card cardPoint;
和Card cardSuits;
,只需使用 m_suit
和 m_points
,print() 方法对它们是私有的没有问题,因为它是一个成员函数。我的意思是,只要写cout << m_points << " of " << m_suit << endl;
它就会起作用。
我还看到了 Card::Card(cSuit s, cPoints p)
构造函数中可能存在的错误 - 想想当你用 s == 无效和 p == 2 调用它时会发生什么。另外,Card::cPoints Card::points()
功能不必要地复杂 - 您可以return m_points;
.
而且你应该真正学会格式化你的代码......
编辑:我看到它总是打印"无效卡"的另一个原因 - 在打印功能中,您使用多个if
语句,您应该在其中使用else if
:
if (m_points >=2 && m_points <= 10){...}
else if (m_points == 11){...}
else if (m_points == 12){...}
else if (m_points == 13){...}
else if (m_points == 14) {...}
else { cout << "Invalid card" << endl; }
在你的版本中,没有else if
',它只是一个接一个地执行if
语句,最后它达到 if(m_points == 14)
,在大多数情况下 whish 是假的,所以它会转到else
语句,并打印"无效卡"
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 从函数返回任意简单类型的数据
- 通过 NIF 从C++返回自定义数据结构
- 为什么我们使用在C++中返回数据结构的函数?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 如何在模板中返回正确类型的数据?
- H5Tget_member_type() 返回复合 HDF5 数据类型的奇怪值
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 在C++中,运算符 sizeof 返回什么数据类型?
- 函数重载并根据相同的输入返回不同的数据类型
- 从新实例的向量中检索数据返回 0
- 类类型中的访问器函数未从 C++ 中的私有数据返回正确的值
- c++ 函数,将数据返回到引用向量
- UNIX域套接字C++服务器无法将数据返回到客户端
- 获取和设置内部数据:返回类型,错误情况下的行为
- 存储在char数组中的双精度数据返回浮点值
- QtCreator QMediaPlayer元数据返回空白QString
- 直接使用变量(数组中的数据返回相同)或与指针一起使用