1. this.name= name, 变成了this->name=name;
#include <string>
using namespace std;
class Person {
private:
string name;
public:
void setName(string name) {
//一个简单的javabean就变成了这样.
//要用->而不是用.
this->name = name;
}
string getname() {
return name;
}
};
2.方法中传对象也是值传递.
#include <iostream>
#include "Person.cpp"
using namespace std;
void setname_out(Person p);
int main() {
Person p;//这样就初始化了P. 还真有点不好理解.
p.setName("zhangsan");
cout << "111:" << p.getname() << endl;
setname_out(p);
cout << "333:" << p.getname() << endl;
return 0;
}
void setname_out(Person p) {
p.setName("lisi");
cout << "222:" << p.getname() << endl;
}
/**
结果打印为:
111:zhangsan
222:lisi
333:zhangsan
你看:传了一个对象也是值传递.
*/
3. 指针传递的是地址, 所以可以改变原值.--->忘了那本书说了, java中的引用传递就是用了指针.
void setname_out_pointer(Person *p){
(*p).setName("lisi");
cout<<"222:"<<(*p).getname()<<endl;
}
/**
结果打印为:
111:zhangsan
222:lisi
333:lisi
*/
4. C++中的引用不是java中的引用哦~, 它是变量的别名, 但是在函数传递这块也和直接传递变量不一样, 因为它可以改变原值.
为什么? 书曰: 引用作为函数参数, 这时函数并没有对形参对象初始化(就是说直接用变量传递对形参对象初始化了).
void setname_out_pointer(Person *p){
(*p).setName("lisi");
cout<<"222:"<<(*p).getname()<<endl;
}
/**
结果打印为:
111:zhangsan
222:lisi
333:lisi
*/
注意: 4.1 引用对象不是一个独立的对象,不单独战胜内存单元,所以传引用比传指针好
4.2 虽然系统向实参传递的是实参的地址而不是实参的值,但实参必须使用对象名.