gpt4 book ai didi

c++ - 使用指针访问数组中的对象数据成员

转载 作者:行者123 更新时间:2023-11-30 04:55:35 24 4
gpt4 key购买 nike

我正在尝试允许用户输入来创建新对象以添加到数组中。每个对象都有一个数据成员,然后我尝试获取该数据成员,然后使用不同的值进行设置。

正如我一直在审查这个,我已经能够设置数组下标来调用构造函数,获取 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++ - 使用指针访问数组中的对象数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com