1.運算子的本質是什麼?
把運算子看作函式名,通過函式過載的方式為同乙個運算子實現不同規則的運算,故運算子過載的本質就是函式過載。
2. 怎樣進行運算子過載?
運算子過載的函式名是由關鍵字operate和其後重要的運算子符號構成。運算子函式定義的一般格式如下:
資料型別 operate 《運算子符號》(《引數列表》)
3、哪些運算子可以過載?
「+」,「-」,「*」,「/」,「%」等除了「.」「.*」「::」sizeof和三目運算子以外c++中所有自帶的運算子都可以過載。
4、合法的運算子過載有哪些限制?
(1) 過載之後的運算子不能改變運算子的優先順序和結合性;
(2) 過載之後的運算子不能改變運算子運算元的個數及語法結構;
(3) 過載的運算子運算元至少有乙個是自定義型別的;
(4) 過載運算子函式通常不能有預設的引數。
(1)函式的引數個數要比原來的運算元少乙個左運算元(成員函式用this指標隱式地訪問了乙個物件,後置單目運算子不需要顯式說明引數)。
(2)呼叫成員函式運算子的標準格式:
《物件名》.operator《運算子》(《引數》) <=> 《物件名》《運算子》《引數》
如: m.operator+n <=> m+n
(3)除 =、()、[ ]、->不能過載為類的友員函式外其他運算子都可以過載為類的成員或友員函式。
6、虛繼承的作用?
多重繼承時,如:d繼承自類b和類c,而類b、c繼承自類a,當把類b和c定義為對a的虛繼承時,類a、b、c、d共享同乙份變數或函式。如:
d.d::a;可以用以下表示:
d.a::a;
d.b::a;
d.c::a;
7、父類和子類物件之間的賦值有什麼限制?
·有公有繼承關係的物件間才可以賦值
·子類物件可以給父類物件賦值
·父類物件不可以給子類物件賦值
·若想父類物件給子類物件賦值,可以強制型別轉換(很危險)
8、過載、覆蓋以及隱藏有什麼區別?
過載通常指函式過載,表示在乙個類中,函式名相同而引數不同,稱為函式過載;
覆蓋是指子類覆蓋父類的函式,覆蓋的要求是函式名相同,引數相同,並且父類函式必須有virtual關鍵字,如果沒有就構不成覆蓋;
隱藏是指子類函式遮蔽了其同名的父類函式或變數,子類的函式或變數可以通過子類物件直接訪問,父類的公有函式或變數通過如下形式訪問:
子類物件.父類::父類公有函式或變數
9、虛函式有什麼特點?
·使用虛函式時,存在子類公有繼承自父類才有意義
·如果在父類中顯式宣告函式為虛函式,在子類中同名同參的函式即使沒有顯式宣告為虛函式,它也是虛函式
·虛函式必須是所在類的,不能是友員函式和靜態成員函式
·建構函式不能是虛函式,但析構函式可以是虛函式
10、類在記憶體中怎麼儲存?
用sizeof統計得到的記憶體是成員變數所佔記憶體,靜態成員並不算在內,而成員函式儲存在**段,也不算在內。
C 運算子過載函式之成員運算子過載函式
5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...
Swift 運算子過載和運算子函式
讓已有的運算子對自定義的類和結構進行運算或者重新定義已有運算子的運算規則,這種機制被稱為運算子過載。1,通過過載加號運算子,使自定義的兩個座標結構體物件實現相加 12 3456 78910 11structcenterpointer func left centerpointer,right cen...
賦值運算子過載函式
問題 給出如下cmystring的宣告,要求為該型別新增賦值運算子函式。class cmystring 當面試官要求應聘者定義乙個複製運算子函式時,他會關注如下幾點 是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身 即 this 的引用?只有返回乙個引用,才可以允許連續賦值。否則如果...