1. 程式人生 > >c++運算子定義為成員函式還是非成員函式

c++運算子定義為成員函式還是非成員函式

=,[],->,()運算子必須是成員,賦值,下標,箭頭訪問,呼叫;

複合賦值運算子一般應該是成員;

改變物件狀態的運算子或與給定型別密切相關的運算子例如遞增減,解引用應該是成員;

具有對稱性的運算子可能轉換任意一端的運算物件,例如==,算術相等性關係,位運算等等

**當把運算子定義為成員函式時,左側必須是運算子所屬類的一個物件

相關推薦

c++運算子定義成員函式還是非成員函式

=,[],->,()運算子必須是成員,賦值,下標,箭頭訪問,呼叫; 複合賦值運算子一般應該是成員; 改變物件狀態的運算子或與給定型別密切相關的運算子例如遞增減,解引用應該是成員; 具有對稱性的運算子可能轉換任意一端的運算物件,例如==,算術相等性關係,位運算等等 **當把運算子定義為成員函式時,左側必須

運算子過載成員函式

運算子過載實質上就是通過函式過載,過載為成員函式,它就可以自由的訪問本類的資料成員,實際使用時,總是通過該類的某個物件來訪問過載的運算子。如果是雙目運算子,左運算元是物件本身的資料,由this指標指出,就不再需要任何引數。下面分別介紹這兩種情況。

C++運算子過載(成員函式方式)

一、運算子過載 C++中預定義的運算子的操作物件只能是基本資料型別,實際上,對於很多使用者自定義型別,也需要有類似的運算操作。如果將C++中這些現存的運算子直接作用於使用者自定義的型別資料上,會得到什麼樣的結果呢?編譯器無法給出正常的結果,因為我們需要運算子過載,給運算子賦

More effective C++ 條款25 將建構函式非成員函式虛擬化

7.1 Item M25:將建構函式和非成員函式虛擬化 從字面來看,談論“虛擬建構函式”沒有意義。當你有一個指標或引用,但是不知道其指向物件的真實型別是什麼時,你可以呼叫虛擬函式來完成特定型別(type-specific)物件的行為。僅當你還沒擁有一個物件但是你又確切地知道想要的物件的型別時,你

17 More Effective C++—條款25(建構函式非成員函式的虛化)

1 建構函式的虛化 1 構造虛擬函式 建構函式與類的名稱相同,因此,此處所指的虛化,並非讓建構函式變成虛擬函式,而是讓其具有類似虛擬函式的行為: 當條件不同時,不同的物件會被創建出來。 下面的程式碼展示了“虛建構函式”的應用。 class Base { }

成員函式非成員函式的區別

今天看書關於成員函式和非成員函式被搞得暈頭轉向的,在群裡問了一下大神們才搞懂是什麼意思,其實簡單來說成員函式是在類中定義的函式,而非成員函式就是普通函式,就是不是在類中定義的函式,其中非成員函式比較典型的是友元函式。下面貼上一些其他的一些區別和理解: 成員函式是類定義的一部

定義一個長方形類並將求周長和求面積定義成員方法實現求周長和麵積的動能(要求鍵盤錄入長和寬)

package org.westos_05_封裝和private; /*  * 定義一個學生類,提供成員變數姓名,和年齡 *  * 現在的寫法:需要將成員變數私有化,提供對外的公共訪問方法(也屬於成員方法) * */ class Student2{//私有化成員變數priv

C++基礎知識複習--運算子過載(非成員函式過載和成員函式過載)

#include<iostream> using namespace std; class Complex { private: float Vector_x; float Vector

C++第十週【任務2】定義一個名CPerson的類,有以下私有成員:姓名、身份證號、性別和年齡,成員函式:建構函式、解構函式、輸出資訊的函式

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: C++第十週【任務2】 * 作

C/C++基類的解構函式為什麼必須定義虛擬函式

C/C++基類的解構函式為什麼必須定義為虛擬函式?   為什麼基類的解構函式是虛擬函式? 在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。 (1)第一種情況:沒有多型,建立派生類物件,基類的解構函式不是虛擬函式 #include<

過載++運算子成員函式(日期類函式設計也可以看一下 )

//這篇程式碼比較長建議貼上下來到dev裡面用左邊的+-把部分函式收起來一條條的開啟看 不容易亂 #include <iostream> using namespace std; class Date{ private: int year,month,day;//年月日 b

C++ 基類的解構函式為什麼需要定義虛擬函式

主要是因為當通過父類的指標或引用指向子類的物件時,刪除子類時父類的解構函式不能被呼叫造成記憶體洩露。 1.當基類的引用指向基類的物件 #include<iostream> #include<cstring> #include<cstdlib> using

c++模板類的成員函式的宣告與定義應該放在標頭檔案裡

    今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示

C++中為什麼建構函式不能定義虛擬函式

關於C++為什麼不支援虛擬建構函式,Bjarne很早以前就在C++Style and Technique FAQ裡面做過回答 Avirtual call is a mechanism to get work done given partialinformation. In particular

C++建構函式是否可以定義private

思考下:什麼時候建構函式需要定義為private? 1,如果一個類的建構函式只有一個且為private,這是可以編譯通過的; class Parent { private :     Parent()     {         cout<<"parent :p

C++使用static的錯誤:無法解析的外部符號、“static”不應在檔案範圍內定義成員函式上使用 .

   當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每一個普通資料成員的副本,但靜態資料成員只有一個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。     靜態資料成員的用途之一

C++——運算子的過載---以成員函式方式過載---以友元函式方式過載

一、運算子的過載   1、運算子的過載   允許把標準運算子(如+ - * /等運算子)應用於自定義資料型別的物件,可以提高程式的可讀性,運算子的過載本質上還是函式過載。運算子僅僅是語法上的方便,它是另一種函式呼叫的方式,只有在設計涉及的程式碼更容易寫,尤其是更容易讀的時候才有必要過載。   2、實現運

將例3.14改寫在類模版外定義成員函式(第三章第十二題)

#include <iostream> using namespace std; template<class numtype> class Compare {public: Compare(numtype a,numtype b); numtype

C++11特性--新的類功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法和禁用方法(default,delete),委託建構函式,管理虛方法(override,final)

      class A      {         public:            void fun(int x )            {               cout<<x<<endl;             }                      

C++:為什麼在繼承關係中,父類的解構函式最好定義虛擬函式

我們先來看一段簡單程式碼,A類有一個指標成員_pa,B類公有繼承了A類,然後自己有一個指標成員_pb: class A{ public: A(int x = 1) :_pa(new int(x)) {} ~A()