C++ c++;此指针没有';t执行构造函数 #包括 使用名称空间std; 甲级{ 公众: int-val; (){ val=0; } A(整数n){ val=n; } A GetObj(){ 归还*这个; } }; main(){ A A; cout
现在,C++ c++;此指针没有';t执行构造函数 #包括 使用名称空间std; 甲级{ 公众: int-val; (){ val=0; } A(整数n){ val=n; } A GetObj(){ 归还*这个; } }; main(){ A A; cout,c++,C++,现在,GetObj()通过值返回A,因此它有效地返回了*此的副本。返回的对象不是A-它是一个全新的实体,由A创建。要使其工作,您需要通过引用返回它: #include <iostream> using namespace std; class A { public: int val; A(){ val=0; } A( int n){ val=n; } A GetObj(){ return
GetObj()
通过值返回A
,因此它有效地返回了*此
的副本。返回的对象不是A
-它是一个全新的实体,由A
创建。要使其工作,您需要通过引用返回它:
#include <iostream>
using namespace std;
class A {
public:
int val;
A(){
val=0;
}
A( int n){
val=n;
}
A GetObj(){
return *this;
}
};
main() {
A a;
cout << a.val << endl;
a.GetObj() = 5;
cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为val
添加一个setter:
A& GetObj(){
return *this;
}
然后:
class A {
public:
//other things..
void SetValue(int value) {
this->val = value;
}
};
现在,GetObj()
通过值返回A
,因此它实际上返回了*此
的一个副本。返回的对象不是A
-它是一个全新的实体,由A
创建。要使其工作,您需要通过引用返回它:
#include <iostream>
using namespace std;
class A {
public:
int val;
A(){
val=0;
}
A( int n){
val=n;
}
A GetObj(){
return *this;
}
};
main() {
A a;
cout << a.val << endl;
a.GetObj() = 5;
cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为val
添加一个setter:
A& GetObj(){
return *this;
}
然后:
class A {
public:
//other things..
void SetValue(int value) {
this->val = value;
}
};
现在,GetObj()
通过值返回A
,因此它实际上返回了*此
的一个副本。返回的对象不是A
-它是一个全新的实体,由A
创建。要使其工作,您需要通过引用返回它:
#include <iostream>
using namespace std;
class A {
public:
int val;
A(){
val=0;
}
A( int n){
val=n;
}
A GetObj(){
return *this;
}
};
main() {
A a;
cout << a.val << endl;
a.GetObj() = 5;
cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为val
添加一个setter:
A& GetObj(){
return *this;
}
然后:
class A {
public:
//other things..
void SetValue(int value) {
this->val = value;
}
};
现在,GetObj()
通过值返回A
,因此它实际上返回了*此
的一个副本。返回的对象不是A
-它是一个全新的实体,由A
创建。要使其工作,您需要通过引用返回它:
#include <iostream>
using namespace std;
class A {
public:
int val;
A(){
val=0;
}
A( int n){
val=n;
}
A GetObj(){
return *this;
}
};
main() {
A a;
cout << a.val << endl;
a.GetObj() = 5;
cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为val
添加一个setter:
A& GetObj(){
return *this;
}
然后:
class A {
public:
//other things..
void SetValue(int value) {
this->val = value;
}
};
它遵循一种最接近您试图实现的替代方法(
getObj
,后跟=
符号)
#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;
cout它遵循一种最接近您试图实现的目标的替代方法(getObj
后跟=
符号)
#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;
cout它遵循一种最接近您试图实现的目标的替代方法(getObj
后跟=
符号)
#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;
cout它遵循一种最接近您试图实现的目标的替代方法(getObj
后跟=
符号)
#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;
无法确定它是否应该编译。但是a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要了解调用a.GetObj()时a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是a
。不确定它是否应该编译。但是a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用a.GetObj()时a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是a
。不确定它是否应该编译。但是a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用a.GetObj()时a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是a
。不确定它是否应该编译。但是a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用a.GetObj()时a::GetObj()
实际返回的是什么
在您完全理解为什么它不能按原样工作之前。提示:它不是a
。从技术上讲,他不需要定义赋值运算符,因为编译器将使用a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到。答案缩短了一点,tha