這次我們通過來
自定義陣列型別
過載、<>、==、!=運算子
來學習c++運算子過載相關知識。
c++的運算子過載是c++相對於其他程式語言的一大特色。
在c++裡面,我們用class自定義乙個型別後,為啥可以直接使用 = 賦值運算子呢?因為 c++自動為我們做了這個動作,
我們定義的型別中沒有顯示定義=運算子,它會自動為我們新增預設的operator=過載函式。
我們進行運算子過載是應該改變其原來的意義!比如說原來是加的含義,你給過載為減的含義那就不應該了。
進行運算子過載有2種方式。
第一種:將運算子過載放在全域性函式,這種方式的函式引數,至少有乙個是我們自定義型別,不然就改變運算子的本來的意義了。
第二種:將運算子過載放在自定義class類中,這種方法方便訪問類中的私有成員。第一種如果要頻繁的訪問類中的私有成員,可以使用將其作為類的友元函式。
如果乙個函式要頻繁的訪問類的私有成員,必須通過方法進行呼叫,這樣會增加函式呼叫壓棧出棧的開銷,我們可以將這個函式定義為類的友元函式,這樣就函式可以無**的
訪問的類的私有成員了。
友元函式定義類的內部,一般是先宣告後定義,和普通函式宣告一樣,不過在前面加乙個friend 關鍵字。
如果在全域性函式進行運算子過載,那麼所有的引數都必須作為函式引數。
如果是在類中進行運算子過載,函式中自動會把運算子操作的物件作為this指標傳入的函式中,所以引數會少乙個。如果我們要對傳送的引數進行修改,如果是的c話只能傳指標,c++為了更方便我們開發,新增了引用,一般我們使用引入傳遞。如果不是引用傳遞 修改只會對引數副本進行修改不會影響原物件。
返回值應該根據這個運算子運算之後的結果來確定。打個比方比如前置運算子++,可以++++a吧,那麼返回值一定可以在原來的基礎上繼續進行改變,這樣的返回值我們一般返回引用。就好比 我們過載《運算子 返回的是ostream的引用 這樣我們就可以連續使用 << 操作符了。
**中過載了、<>、==、!=運算子和友元函式的使用。
#pragma once
#ifndef __my_array_h__
#define __my_array_h__
#include using namespace std;
class myarray
;#endif // !__my_array_h__
#include #include #include #include "myarray.h"
using namespace std;
myarray::myarray()
myarray::myarray(int len)
myarray::myarray(const myarray& another)
}int myarray::getdata(int index)
void myarray::setdata(int index, int data)
int myarray::getlengh()
ostream& operator<
cout << myarray.arr[myarray.len - 1] << "]" << endl;
return cout;
}istream& operator >> (istream &cin, myarray& myarray)
return cin;
}myarray & myarray::operator=(myarray & another)
//2、將自身開闢的空間**
if (this->arr != null)
//3、執行深拷貝
this->len = another.len;
this->arr = new int[another.len];
for (size_t i = 0; i < this->len; i++)
//4、返回本身
實現自定義容器型別
想要實現乙個自定義類,該類模仿普通的內建容器型別 例如list或dict 的行為。但是,不確定要實現哪種方法。collections.abc模組定義了各種抽象基類,這些基類在實現自定義容器類時非常有用。自定義類一般通過繼承該模組的對應基類,然後實現所需要的類方法。如下 from collection...
AIDL傳遞自定義型別實現
1 自定義型別實現 parcelable介面 如下 package com.xindun.xdemm.bean import android.os.parcel import android.os.parcelable public class userinfo implements parcela...
C 自定義屬性實現
在用c 寫程式的時候,可能會用到自定義屬性來傳遞一些資料,這次就來簡單看看自定義屬性的用法 1.寫自定義屬性類 a.宣告自定義屬性類,繼承自attribute類 b.定義所需的建構函式,欄位和屬性 c.新增attributeusageattribute屬性 attributeusage attrib...