类模板

1)设计一个数组模板类( Vector ),完成对int、char、float、double 以及任意的自定义类等类型元素进行管理。
需求
a.实现构造函数
b.实现拷贝构造函数
c.实现cout << 操作
d.实现下标访问符[] 的重载操作
e.实现 = 号操作符重载
// demo 15-13 Vector.h
#include

using namespace std;

template
class Vector
{
//Vector a(10); cout< friend ostream& operator<< (ostream& out, const Vector& object);
public:
Vector(int size = 128); //构造函数
Vector(const Vector& object); //拷贝构造函数
//Vector a(10); a
//operator<<()

int getLength();//获取内部储存的元素个数

//Vector a1, a2;  a1[0]
T& operator[](int index);

//实现=操作符重载
//a1 = a2 = a3;
Vector& operator=(const Vector& object);
~Vector(); //析构函数

private:
T* m_base;
int m_len;
};

cpp

#include “vector.h”

template
ostream& operator<<(ostream& out, const Vector& object)
{
for (int i = 0; i < object.m_len; i++)
{
out << object.m_base[i] << " ";
}
out << endl;
return out;
// TODO: 在此处插入 return 语句
}
template
inline Vector::Vector(int size)
{
if (size > 0)
{
m_len = size;
m_base = new T[m_len];
}
}

template
inline Vector::Vector(const Vector& object)
{
//根据转入的对象元素个数分配空间
m_len = object.m_len;
m_base = new T[m_len];

//数据的拷贝
for (int i = 0; i < m_len; i++)
{
	m_base[i] = object.m_base[i];
}

}

template
inline int Vector::getLength()
{
return m_len;
}

template
inline T& Vector::operator[](int index)
{
// TODO: 在此处插入 return 语句
return m_base[index];
}

template
Vector& Vector::operator=(const Vector& object)
{
if (m_base != NULL)
{
delete[] m_base;
m_base = NULL;
m_len = 0;
}

//根据传入的对象元素个数分配空间
m_len = object.m_len;
m_base = new T[m_len];

//数据的拷贝
for (int i = 0; i < m_len; i++)
{
	m_base[i] = object.m_base[i];
}

return *this;

}
template
Vector::~Vector()
{
if (m_base != NULL)
{
delete[] m_base;
m_base = NULL;
m_len = 0;
}
}
// TODO: 在此处插入 return 语句

main

// demo 15-13 13_类模板实战.cpp
#include
using namespace std;

#include “Vector.cpp”

class Student {
friend ostream& operator<<(ostream& out, const Student& object);
public:
Student() {
age = 0;
name[0] = ‘\0’;
}

Student(int _age, char *_name) {
	age = _age;
	strcpy_s(name, 64, _name);
}

void print() {
	cout << name << ", " << age << endl;
}

~Student() {

}

private:
int age;
char name[64];
};

ostream& operator<<(ostream& out, const Student& object) {
out << “(” << object.name << " , " << object.age << “)”;
return out;
}

int main() {
//Student s1(18, “李小花”);
//Student s2(19, “王大炮”);

//Vector studentVector(2);

//studentVector[0] = &s1;
//studentVector[1] = &s2;

///*for(int i=0; i myVector(10);
//int a[10]; len: sizeof(a)/sizeof(a[0])
for (int i = 0; i < myVector.getLength(); i++) {
	myVector[i] = i;
}

cout << myVector << endl;
system("pause");

for (int i = 0; i < myVector.getLength(); i++) {
	cout << myVector[i] << endl;
}

//测试拷贝构造函数
Vector myIntVector1(myVector);
cout << "myIntVector1 中的元素如下:" << endl;
for (int i = 0; i < myIntVector1.getLength(); i++) {
	cout << myIntVector1[i] << endl;
}
cout << "---end---" << endl;

//测试赋值运算符重载
Vector myIntVector2(1);
myIntVector2 = myIntVector1;

cout << "myIntVector2 中的元素如下:" << endl;
for (int i = 0; i < myIntVector1.getLength(); i++) {
	cout << myIntVector1[i] << endl;
}
cout << "---end---" << endl;


Vector myVector1(10);
//int a[10]; len: sizeof(a)/sizeof(a[0])
for (int i = 0; i < myVector1.getLength(); i++) {
	myVector1[i] = i * 0.1f;
}

for (int i = 0; i < myVector1.getLength(); i++) {
	cout << myVector1[i] << endl;
}

system("pause");
return 0;

}

你可能感兴趣的:(类模板)