在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>。