陣列模板類MyVector

2021-09-20 19:03:56 字數 2613 閱讀 8018

定義類模板

myvector.h

#pragma once

#include using namespace std;

//先考慮型別int char

template class myvector

//過載 = <<

t& operator(int index);

myvector& operator=(myvector& obj2);

private:

t *m_space;

int m_len;

};

實現類模板成員函式

myvector.cpp

#include #include "myvector.h"

using namespace std;

template ostream& operator<<(ostream& out, myvector& obj)

out << endl;

return out;

}template myvector::myvector(int size)

template myvector::myvector(const myvector& obj1) //拷貝建構函式

}template myvector::~myvector()

}//過載 = <<

template t& myvector::operator(int index)

template //a2=a1

myvector& myvector::operator=(myvector& obj2)

m_len = obj2.m_len;

m_space = new t[m_len];

for (int i = 0; i < m_len; i++)

return *this;

}

基本資料型別,類元素,類指標 測試框架

myvectormain.cpp

//類模板練習:可以管理基本資料型別,類元素,類指標

//這種多檔案的除錯在改變**後有時需要重新生成解決方案再進行除錯

#define _crt_secure_no_warnings

#include #include "myvector.cpp"

using namespace std;

/*//定義乙個teacher類,其物件放入類模板裡

class teacher

teacher(int age, const char *name) //出錯後這裡加const

void printt()

private:

int age;

char name[32]; //預先分配了記憶體,不會有淺拷貝的問題

};*/

//優化teacher類 5個點,拷貝構造 析構 過載= <<

class teacher

teacher(int age, const char *name) //還是要加const }

teacher(const teacher& obj) //拷貝建構函式

age = obj.age;

if (obj.pname != null)

} ~teacher() }

void printt()

teacher& operator=(teacher& obj) //函式體和拷貝建構函式幾乎一樣對嗎?

age = obj.age;

if (obj.pname != null)

return *this;

}private:

int age;

//採取指標的定義,需解決淺拷貝的問題

char *pname;

};ostream& operator<<(ostream& out, teacher& obj)

int main02()

*/ return 0;

}//以上資料型別為teacher元素,下面採用teacher指標

int main()

return 0;

}int main01()

cout << endl;

myvectormyv2 = myv1;

for (int i = 0; i < myv1.getlen(); i++)

cout << endl;

cout << myv2;

return 0;

}

結論1: 如果把teacher放入到myvector陣列中,並且teacher類的屬性含有指標,就是出現深拷貝和淺拷貝的問題。

結論2:需要teacher封裝的函式有:

重寫拷貝建構函式 

過載等號操作符 

過載左移操作符。

理論提高:所有容器提供的都是值(value)語意,而非引用(reference)語意。容器執行插入元素的操作時,內部實施拷貝動作。所以stl容器內儲存的元素必須能夠被拷貝(必須提供拷貝建構函式)。

MyVector類模仿設計

今天學完演算法之後突然想起來上個學期乙個課上模仿vector設計的乙個類可以貼出來水一水,如果有類似課程作業的同志可以參考下吧 但質量不保證,僅供參考,可能有錯。ifndef myvector hpp define myvector hpp include using namespace std t...

c 學習 模板 實現my vector

主要練習模板的使用 如下 ifndef my vector h define my vector h template class my vector my vector const my vector rhs const my vector operator const my vector rhs...

陣列類模板

問題及描述 檔名稱 test.cpp 作者 邱凱 完成日期 2016年5月31號 版本號 v6.0 問題描述 陣列類模板 輸入描述 輸入資料 輸出描述 輸出答案 include include include using namespace std template class array temp...