Как правильно создать шаблон функции для перестановки местами двух значений
Имеется задача создать шаблон функции для перестановки местами двух значений.При выводе второй строки выдаёт разные значки. Подскажите пожалуйста в чём ошибка.
Swap.h
#include <iostream>
template<class T> void Swap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
MyString.h
class MyString
{
char* m_pStr; //строка-член класса
public:
MyString(); // конструктор без параметров
MyString(const char* str);// конструктор с параметром
MyString(const MyString& nov); // конструктор копирования
~MyString(); // деструктор
const char* GetString()const;
void SetNewString(const char* str);
friend std::ostream& operator<<(std::ostream& os, const MyString& other);
};
std::ostream& operator<<(std::ostream& os, const MyString& other);
MyString.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include < string.h >
#include "MyString.h"
#include <iostream>
MyString::MyString() // конструктор без параметров
{
m_pStr = nullptr;
}
MyString::MyString(const char* str)// конструктор с параметрами
{
m_pStr = new char[strlen(str) + 1];
strcpy(m_pStr, str);
}
MyString::MyString(const MyString& nov) // конструктор копирования
{
m_pStr = new char[strlen(nov.m_pStr) + 1];
strcpy(m_pStr, nov.m_pStr);
}
MyString::~MyString()// деструктор
{
delete[] m_pStr;
}
const char* MyString::GetString()const
{
return m_pStr;
}
void MyString::SetNewString(const char* str)
{
delete[] m_pStr;
if (str != nullptr)
{
m_pStr = new char[strlen(str) + 1];
strcpy(m_pStr, str);
}
}
std::ostream& operator<<(std::ostream& os, const MyString& other)
{
os << other.m_pStr << std::endl;
return os;
}
main
int iX = 1, iY = -1;
Swap(iX, iY);
std::cout << iX << " " << iY << "\n ";
double dX = 0.5, dY = -5.5;
Swap(dX, dY);
std::cout << dX << " " << dY << "\n";
MyString str1("One"), str2("Two");
Swap(str1, str2);
std::cout << str1 << str2;