C++:策略模式+模板+虛(virtual)繼承+排序

C++:策略模式+模板+虛繼承+排序

一時興起,純原創! ZJUT_YC

文件說明

  • 排序函數接口定義文件:SortAlgorithmInterface.h
  • 冒泡排序文件實現:BubbleSort.h
  • 選擇排序文件實現:SelectSort.h
  • 策略模式Contex文件定義: SortAlgorithmContext.h
  • 測試文件:main.cpp

代碼詳情

SortAlgorithmInterface.h

#pragma once
template<typename T>
class SortAlgorithmInterface
{
public:
	virtual void sort(T data_array[],int size)=0;
};

BubbleSort.h

#pragma once
#include "SortAlgorithmInterface.h"
#include <exception>
#include <iostream>
template<typename T>
class BubbleSort :
	public SortAlgorithmInterface<T>
{
public:
	virtual void sort(T data_array[], int size);
};

template<typename T>
inline void BubbleSort<T>::sort(T data_array[], int size)
{
	std::cout << "BubbleSort:\n";
	/*if (sizeof(data_array) != 0 && (sizeof(data_array) / sizeof(data_array[0])) != size) {
		throw std::exception("size error!");
		return;
	}*/
	T* data = new T();
	for (int i = 0; i < size - 1; i++)
	{
		for (int j = 0; j < size - 1 - i; j++)
		{
			if (data_array[j] > data_array[j + 1]) {
				*data = data_array[j];
				data_array[j] = data_array[j + 1];
				data_array[j + 1] = *data;
			}
		}
	}
	delete data;
	data = nullptr;
}

SelectSort.h

#pragma once
#include "SortAlgorithmInterface.h"
#include <exception>
#include <iostream>
template<typename T>
class SelectSort :
	public SortAlgorithmInterface<T>
{
public:
	virtual void sort(T data_array[], int size);
};

template<typename T>
inline void SelectSort<T>::sort(T data_array[], int size)
{
	std::cout << "SelctSort:\n";
	/*if (sizeof(data_array) != 0 && (sizeof(data_array) / sizeof(data_array[0])) != size) {
		throw std::exception("size error!");
		return;
	}*/
	T* data = new T();
	for (int j = size - 1; j > 0; j--) {
		for (int i = 0; i < j; i++) {
			if (data_array[j] < data_array[i]) {
				*data = data_array[j];
				data_array[j] = data_array[i];
				data_array[i] = *data;
			}
		}
	}
	delete data;
	data = nullptr;
}

SortAlgorithmContext.h

#pragma once
#include"SortAlgorithmInterface.h"

template<typename T>
class SortAlgorithmContext
{
private:
	SortAlgorithmInterface<T>* m_alg;
public:
	SortAlgorithmContext();
	~SortAlgorithmContext();
	void set(SortAlgorithmInterface<T>* alg);
	void sort(T data_array[], int size);
};

template<typename T>
inline SortAlgorithmContext<T>::SortAlgorithmContext()
{
	m_alg = nullptr;
}

template<typename T>
inline SortAlgorithmContext<T>::~SortAlgorithmContext()
{
	delete m_alg;
	m_alg = nullptr;
}

template<typename T>
inline void SortAlgorithmContext<T>::set(SortAlgorithmInterface<T>* alg)
{
	m_alg = alg;
}

template<typename T>
inline void SortAlgorithmContext<T>::sort(T data_array[], int size)
{
	m_alg->sort(data_array, size);
}

main.cpp

#include "sort_algorithm.h"
#include "SortAlgorithmInterface.h"
#include "BubbleSort.h"
#include "SelectSort.h"
#include "SortAlgorithmContext.h"

int main() {
	const int size = 100;
	int a[size];
	initial_int_array(a, size);
	SortAlgorithmInterface<int>* sort_alg_0 = new SelectSort<int>();
	SortAlgorithmInterface<int>* sort_alg_1 = new BubbleSort<int>();

	SortAlgorithmContext<int>* context = new SortAlgorithmContext<int>();
	context->set(sort_alg_0);
	context->sort(a,size);
	print_int_array(a, size);

	context->set(sort_alg_1);
	context->sort(a, size);
	print_int_array(a, size);
	/*initial_int_array(a, size);
	bubble_sort(a, size);
	print_int_array(a, size);*/
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章