使用指针访问数组中的对象数据成员
Using pointers to access object data members in an array
我正在尝试允许用户输入以创建新对象以添加到数组中。 每个对象都有一个数据成员,然后我尝试获取该成员,然后使用不同的值进行设置。
当我一直在审查这一点时,我已经能够设置数组下标来调用构造函数,获取 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()
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 有没有办法在C++中循环访问对象的不同数据成员
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 如何在C++中使用类对象访问指针数据成员
- 如何高效更改向量中所有对象的成员数据?
- C++中的常量对象或私有/常量数据成员(变量)?
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 通过向量中的对象的数据成员迭代
- 继承的类对象如何使用私有数据成员
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 从R中访问C 对象数据成员
- 静态数据成员是否在所有类对象之前初始化?
- 通过指向对象数据成员的指针更改该对象的值
- C .更改对象数据成员的数据成员
- 排序类对象数据成员从大到小
- 如何设置对象数据成员与这个c++与这个
- 按对象数据成员属性搜索对象的向量