多載賦值運算子時
1- const intlong &operator=(const intlong&)
2- intlong &operator=(const intlong&)
我開始以為第1個帶const表示回傳值不能被修改,只能做為常量回傳,但測驗時發現和第2個是一樣,可以用于連續賦值
比如
intlong a(5);
intlong b(0);
intlong c(6);
a=b=c;
----那第1種回傳值為const和第2種回傳值不帶const有什么區別?
還有
3- intlong &operator=(const intlong&)const;
4- intlong operator=(const intlong&)const;
這兩種定義為const多載賦值運算子有什么作用?
----不能修改內部this成員這種賦值怎么改變左邊值?,是不是說多載賦值運算子除了1和2有意義,3和4沒意義
#include <iostream>
using namespace std;
class intlong{
friend ostream &operator<<(ostream&,const intlong&);
public:
intlong(int);
intlong(const intlong&);
intlong operator+(const intlong&)const;
const intlong &operator=(const intlong&); //前面加const
//intlong &operator=(const intlong&); //前面無const 無cons和有const怎么不能同時定義類中
private:
int p;
};
const intlong &intlong::operator=(const intlong& rhs){
this->p=rhs.p;
return *this;
}
/*
intlong &intlong::operator=(const intlong& rhs){
this->p=rhs.p;
return *this;
}*/
ostream &operator<<(ostream &cout,const intlong &rhs){
cout<<rhs.p<<endl;
return cout;
}
intlong::intlong(int rhs):p(rhs){
}
intlong::intlong(const intlong &rhs){
this->p=rhs.p;
}
intlong intlong::operator+(const intlong &rhs)const{
intlong temp(0);
temp.p=(*this).p + rhs.p ;
return temp;
}
int main()
{
intlong a(5);
intlong b(6);
intlong c(7);
a=b=c;
cout<<a<<endl;
return 0;
}
uj5u.com熱心網友回復:
回傳值是右值,const 修飾右值沒有任何意義uj5u.com熱心網友回復:
T a=b這種情況下,不管b是不是const ,都會發生復制。舉個簡單例子
int a=1; //這里的1明顯是個const int 因為它是字面量,不可能被改寫,執行這個陳述句后1這個資料就會被復制到a的存盤單元里去了
uj5u.com熱心網友回復:
下面T operator=(..)const是錯誤的賦值運算子,因為賦值必然要修改,而const不允許修改,所以不對uj5u.com熱心網友回復:
可能不是這原因,int a=1 即使是 const int a=1 這是可以的,因為這是初始化不是賦值,記的書上有說過const是在初始化后才起作用。
1- const intlong &operator=(const intlong&)
2- intlong &operator=(const intlong&)
3- intlong &operator=(const intlong&)const;
4- intlong operator=(const intlong&)const;
我想問,是不是1和2多載賦值運算子才有意義,3和4雖然可以通過編譯實際上并沒什么用處
uj5u.com熱心網友回復:
一樣的。int a=10;
a=1;//這里是初始化還是賦值??
其實你的問題不難,但是要你明白比較難,建議看一下ec++
3,4,除非你不修改this,只要你一修改,就出錯。
uj5u.com熱心網友回復:
我還是那句話,不建議碎片化學習,最好系統的找一本書學一下,否則容易盲人摸象uj5u.com熱心網友回復:
賦值必然發生修改,所以34是錯的uj5u.com熱心網友回復:
3和4可以編譯通過 是對應const物件 比如
const intlong d(8);
d=a;
這種情況 如果不提供3或4 將編譯不過去,后來想了半天也想不出提供3和4 怎么修改d物件 覺的3和4好像沒有意義
uj5u.com熱心網友回復:
const intlong d(8);d=a;
你覺得這樣的代碼對嗎?
uj5u.com熱心網友回復:
如果這樣的代碼對的話,那么
const int a=10;
a=11;
這樣的代碼就應該對
uj5u.com熱心網友回復:
多謝,在看cpp大學教程第五版這本書 就是在學程序中覺這樣寫和那樣寫都可以編譯,有什么用這種疑問
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264280.html
標籤:新手樂園
下一篇:c++
