運算子過載實現可變長陣列 以及 自增自減運算

2021-08-21 02:41:55 字數 2671 閱讀 8460

這篇部落格算是在中m上看完老師的課,做的記錄吧。(另外這篇部落格是補發的,將兩篇放在一起了,上次發布由於網路原因好像沒有發布出來)。

// carray.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include"carray.h"

#includeusing namespace std;

int main()

//程式輸出結果:

//0 1 2 3 4

//0 1 2 100 4

#ifndef _carray_h_

#define _carray_h_

class carray

//返回陣列元素的個數

int & operator(int i); //返回值不能為int,因為它不支援a[i]=4; 只有返回值是引用

};#endif // !_carray_h_

#include#include#include"carray.h"

using namespace std;

int & carray::operator(int i) //返回值不能為int,因為它不支援a[i]=4; 只有返回值是引用

carray::carray(int s) :size(s)

carray::carray(carray &a) //可以避免淺複製的發生

ptr = new int[a.size];

memcpy(ptr, a.ptr, sizeof(int)*a.size);

size = a.size;

}carray::~carray()

carray& carray::operator=(const carray &a)

if (size < a.size) //如果原有空間足夠大,就不用分配新的空間

memcpy(ptr, a.ptr, sizeof(int)*a.size);

size = a.size;

return *this;

}void carray::push_back(int v)

else //陣列本來是空的

ptr = new int[1];

ptr[size++] = v; //加入新的陣列元素

}

接下來是自增自減運算過載:

// 自增自減重載.cpp: 定義控制台應用程式的入口點。

//c++規定:

//前置運算子作為一元函式過載

//過載為成員函式:

//t & operator++();

//t & operator--();

//過載為全域性函式:

//t1 & operator++(t2);

//t1 & operator--(t2);

//後置運算子作為二元運算子過載

//過載為成員函式:

//t operator++(int);

//t operator--(int);

//過載為全域性函式:

//t1 operator++(t2,int);

//t1 operator--(t2,int);

#include "stdafx.h"

#include"demo.h"

#includeusing namespace std;

int main()

#ifndef _demo_h_

#define _demo_h_

class cdemo

cdemo & operator++(); //用於前置形式

cdemo operator++(int); //用於後置形式

operator int()

friend cdemo & operator--(cdemo &);

friend cdemo operator--(cdemo &, int);

};#endif // !_demo_h_

#include"stdafx.h"

#include"demo.h"

#includeusing namespace std;

cdemo & cdemo::operator++() //前置++

//++s 等價於s.operator++();

cdemo cdemo::operator++(int k) //後置++

//s++ 等價於 s.operator++(0)

cdemo & operator--(cdemo &d) //前置--

//--s 等價於 operator--(s)

cdemo operator--(cdemo &d, int) //後置--

//s-- 等價於 operator--(s,0)

運算子過載的注意事項:

1:c++不允許定義新的運算子;

2:過載後運算子的含義應該符合日常習慣;

3:運算子過載不改變運算子的優先順序;

4:".",「*」,"::",「? :」,"sizeof" 不能被過載

5:過載運算子()、、->、=時,運算子過載函式必須宣告為類的成員函式

自增運算子過載

程式的版權和版本宣告部分 檔名稱 test.cpp 作 者 任子儀 完成日期 2014年 4月 19日 版 本 號 v12.1 輸入描述 無 問題描述 程式輸出 問題分析 略 演算法設計 略 includeusing namespace std class time void display 二目賦...

自增運算子過載

前置 是把物件加1後再給你用。後置 是把物件的值借你用,再把物件本身加1。1.作為成員函式 字首自增運算子 test operator 前置運算子 字尾自增運算子 test operator int 後置運算子 2.作為友元函式 先要在類內宣告友元函式 friend test operator te...

過載自減運算子

include class counter counter int v counter operator counter operator int void display cout 注釋 使用運算子字首時,對物件 運算元 進行增量修改,然後再返回該物件,所以字首運算子操作時,引數與返回的是同乙個物...