在C+;中使用指针时,对象属性未按预期更改+; 我试着在C++中使用一些类。来自Java世界,它们略有不同

在C+;中使用指针时,对象属性未按预期更改+; 我试着在C++中使用一些类。来自Java世界,它们略有不同,c++,pointers,arduino,C++,Pointers,Arduino,我试图做的应该是显而易见的:我有一个名为SomeClass的类,它包含一个int。然后我有一个名为a的类,它 // Create a class holding just an integer. class SomeClass { public: int _value; SomeClass(int value) { this->_value = value; } }; class A { pri

我试图做的应该是显而易见的:我有一个名为
SomeClass
的类,它包含一个
int
。然后我有一个名为
a
的类,它

// Create a class holding just an integer.
class SomeClass {
    public:

        int _value;

        SomeClass(int value) {
            this->_value = value;
        }
};

class A {

    private:
        // The property _someClassPointer holds a pointer to a SomeClass object.
        SomeClass *_someClassPointer;
    public:

        // We can set a SomeClass instance as a property of the A class.
        void setSomeClass(SomeClass *someClassPointer) {
            // It copies the local pointer value to the property.
            this->_someClassPointer = someClassPointer;
        }

        // We can retrieve the integer that the SomeClass instance holds.
        // We're assuming _someClassPointer does not point to NULL.
        int getValueOfSomeClass() {
            this->_someClassPointer->_value;
        }
};

void setup() {
    Serial.begin(9600);
}

void loop() {

    // Instantiate SomeClass object with int(5) argument
    SomeClass someClass(5);

    Serial.println(someClass._value); // It prints 5, as expected

    // Instantiate an A object by its default constructor
    A a;

    // Pass the address of someClass to the method
    a.setSomeClass(&someClass);

    // Set the value of someClass to 6
    someClass._value = 6;

    Serial.println(a.getValueOfSomeClass()); // It prints 0
}

为什么打印的是
0
而不是
6

您的函数没有返回值

int getValueOfSomeClass() {
    return this->_someClassPointer->_value;
}
编辑: 我应该提到,您可以删除'this->',因为它隐含在非静态方法中

int getValueOfSomeClass() {
    return _someClassPointer->_value;
}

您的函数没有返回值

int getValueOfSomeClass() {
    return this->_someClassPointer->_value;
}
编辑: 我应该提到,您可以删除'this->',因为它隐含在非静态方法中

int getValueOfSomeClass() {
    return _someClassPointer->_value;
}

第二个问题:这是通过值、引用和指针传递参数之间的区别。这有点棘手,但是你可以在网上找到很多关于这个主题的信息。

第二个问题:这是通过值、引用和指针传递参数之间的区别。这有点棘手,但是你可以在网上找到很多关于这个主题的信息。

关于签名,这些应该放在另一个问题中。但这类问题已经被问过很多次了。搜索“按值传递”、“按引用传递”和“指针”。我投票将此问题作为离题题结束,因为问题1是一种类型,而问题2是重复的。(另外,两个独立问题合为一个)@gha.st“Type”-你是说“typo”?@mceponder哦,太好了,我的“typo”有一个typo>。关于签名,这些应该放在不同的问题中。但这类问题已经被问过很多次了。搜索“按值传递”、“按引用传递”和“指针”。我投票将此问题作为离题题结束,因为问题1是一种类型,而问题2是重复的。(还有,两个独立的问题合一)@gha.st“Type”-你是说“typo”?@mceponder哦,太好了,我的“typo”有一个typo>。