c++ - 使用指针访问数组中的对象数据成员
问题描述
我试图允许用户输入创建新对象以添加到数组中。每个对象都有一个数据成员,然后我尝试获取并设置不同的值。
正如我一直在审查的那样,我已经能够设置数组下标来调用构造函数,获取 Monkey 对象的年龄,然后将年龄设置为新数字,然后再次获取年龄以“年龄”猴。我将其设置为测试,以确保我朝着正确的方向前进。但我宁愿使用指针表示法来访问数组的对象元素,因为我打算创建一个循环,允许用户填充充满猴子对象的数组。由于它们的创造顺序,每只猴子的年龄都会有所不同。我还没有被困在循环部分(我还没有到达那里)。我坚持使用指针符号。
错误的指针符号包含在下面的代码中并被注释掉。
谢谢!
#include <iostream>
class Monkey
{
private:
int age;
public:
//Default constructor with cout so I can see what's happening.
Monkey()
{
age = 10;
std::cout << "Monkey constructed! " << std::endl;
}
//Destructor with cout so I can see what's happening.
~Monkey()
{
std::cout << "Destructor called. " << std::endl;
}
//getter function
int getAge()
{
return age;
}
//setter function to age monkey
void setAge()
{
age = age+ 1;
}
};
int main()
{
Monkey monkeyArray[5];
Monkey* arrayPtr = monkeyArray;
std::cout << "Do you want to create another Monkey? " << std::endl;
std::cout << "1. Yes " << std::endl;
std::cout << "2. No " << std::endl;
int userInput;
std::cin >> userInput;
int monkeyMarker = 0;
if (userInput == 1)
{
//Stuff commented out because I am using the wrong syntax.
//*(arrayPtr + monkeyMarker) = Monkey();
//std::cout << "Monkey age is: " << *(arrayPtr +
//monkeyMarker).getAge << std::endl;
//Using the subscript notations seems to be working fine.
monkeyArray[0] = Monkey();
std::cout << "Monkey age before set function called. "<< monkeyArray[0].getAge() << std::endl;
monkeyArray[0].setAge();
std::cout << "Monkey age after set function called to age him. " << monkeyArray[0].getAge() << std::endl;
}
return 0;
}
解决方案
您分配给数组元素的指针语法是正确的:
*(arrayPtr + monkeyMarker) = Monkey();
由于运算符优先级,您访问它的语法是错误的。.
的优先级高于*
,所以
*(arrayPtr + monkeyMarker).getAge
被视为
*((arrayPtr + monkeyMarker).getAge)
这是试图取消引用getAge
函数指针。
您需要添加括号。此外,由于getAge
它是一个函数,因此您需要使用()
.
(*(arrayPtr + monkeyMarker)).getAge()
->
您可以使用运算符通过指针间接简化此操作:
(arrayPtr + monkeyMarker)->getAge()
推荐阅读
- c# - C# - 用于 DLL 的 Log4Net 在客户端 PC 中不起作用
- assembly - cmpxchg 是否会在失败时写入目标缓存行?如果不是,它是否比自旋锁的 xchg 更好?
- javascript - 修改JS中的初始对象值
- pytorch - 用 CPU 加载 pickle 保存的 GPU 张量?
- python - 尝试导入 python-vlc 时出现错误
- arrays - 程序应该崩溃,但它没有
- kubernetes - 如何从外部访问 pod IP
- c# - 如何代表流创建以从 Web Chat 生成用于 Bot 身份验证的访问令牌?
- javascript - 通过数组过滤包含对象数组的对象数组
- javascript - Angularjs指令使HTML元素可拖动并且其中的HTML字段可选择或可修改