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

时间:2018-10-23 19:16:23

标签: c++ arrays class

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

在我进行审查时,我已经能够将数组下标设置为调用构造函数,获取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;
}

1 个答案:

答案 0 :(得分:1)

您分配给数组元素的指针语法正确:

*(arrayPtr + monkeyMarker) = Monkey();

由于运算符优先级,您访问它的语法是错误的。 .的优先级高于*,因此

*(arrayPtr + monkeyMarker).getAge

被视为

*((arrayPtr + monkeyMarker).getAge)

正在尝试取消引用getAge函数指针。

您需要添加括号。另外,由于getAge是一个函数,因此您需要使用()对其进行调用。

(*(arrayPtr + monkeyMarker)).getAge()

您可以使用->运算符通过指针间接地简化此操作:

(arrayPtr + monkeyMarker)->getAge()