类与函数
几个注意点:
- 是成员函数还是全局函数?
- 类的构造函数、析构函数没有返回值
- 运算符重载注意是否是在
this
上作用的(比如做加法时,不应该改变自己的值)
排序器
运用模板完成。注意,列表类型和需排序内容的类型都要在template
中给出。排序有关内容详见我的博客 【SEU程序设计课笔记】 12 - 2020/11/19 - Write C++ programs - 排序。
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Array
{
size_t size;
T* data;
string name;
public:
Array() = default;
Array(size_t m, T* arr, string name_)
{
name = name_;
size = m;
data = new T[size];
for (int i = 0; i < size; i++)
data[i] = arr[i];
}
Array(Array& source)
{
name = source.name;
size = source.size;
data = new T[size];
for (int i = 0; i < size; i++)
{
data[i] = source.data[i];
}
}
// readable version
T getData(int index) const
{
return data[index];
}
// readable and writeable version
T& getData(int index)
{
return data[index];
}
size_t length() const
{
return size;
}
};
template<typename T>
Array<T> Sort(Array<T>& arr) // bubble sort
{
T temp = 0;
for (size_t t = 0; t < arr.length(); t++)
{
for (size_t k = 0; k < arr.length() - 1; k++)
{
if (arr.getData(k) > arr.getData(k + 1))
{
temp = arr.getData(k);
arr.getData(k) = arr.getData(k + 1);
arr.getData(k + 1) = temp;
}
}
}
return arr;
}
template<typename T>
ostream& operator<<(ostream& out, Array<T> a)
{
for (size_t i = 0; i != a.length(); i++)
{
out << a.getData(i) << "\t";
}
return out;
}
int main(int argc, char** argv)
{
double data[5] = { 1.3, 5.7, -4.2, 0.5, -1.5 };
Array<double> arr(5, data, "ArrayName");
cout << arr << endl;
Sort(arr);
/*
equivalent to
Sort<double>(arr);
*/
cout << arr << endl;
return 0;
}
当然,也可以写一个[]
重载的版本:
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Array
{
size_t size;
T* data;
string name;
public:
Array() = default;
Array(size_t m, T* arr, string name_)
{
name = name_;
size = m;
data = new T[size];
for (int i = 0; i < size; i++)
data[i] = arr[i];
}
Array(Array& source)
{
name = source.name;
size = source.size;
data = new T[size];
for (int i = 0; i < size; i++)
{
data[i] = source.data[i];
}
}
// readable version
T getData(int index) const
{
return data[index];
}
// readable and writeable version
T& getData(int index)
{
return data[index];
}
size_t length() const
{
return size;
}
// readable version
T operator[](int index) const
{
return data[index];
}
// readable and writeable version
T& operator[](int index)
{
return data[index];
}
};
template<typename T>
Array<T> Sort(Array<T>& arr)
{
T temp = 0;
for (size_t t = 0; t < arr.length(); t++)
{
for (size_t k = 0; k < arr.length() - 1; k++)
{
if (arr[k] > arr[k + 1])
{
temp = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = temp;
}
}
}
return arr;
}
template<typename T>
ostream& operator<<(ostream& out, Array<T> a)
{
for (size_t i = 0; i != a.length(); i++)
{
out << a[i] << "\t";
}
return out;
}
int main(int argc, char** argv)
{
double data[5] = { 1.3, 5.7, -4.2, 0.5, -1.5 };
Array<double> arr(5, data, "ArrayName");
cout << arr << endl;
Sort(arr);
/*
equivalent to
Sort<double>(arr);
*/
cout << arr << endl;
return 0;
}
ALL RIGHTS RESERVED © 2021 Teddy van Jerry
欢迎转载,转载请注明出处。