#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
void main(void)
{
//오버리딩이 같은이름으로 다른 기능을 수행하는것
//연산자 오버로딩은 객체지향 언어에서 다형성의 특징이다
//예를 string 으로 들면
string strName;
string strName2;
strName = "NAM";
strName2 = "SEUNGWOO";
strName += strName2;
if(strName == strName2)
{
cout << "두문자열 같음" << endl;
}
/////////////////////////////////////
char szName[20];
char szName2[20];
strcpy_s(szName, sizeof(char) * 20, "NAM");
strcpy_s(szName2, sizeof(char) * 20, "SEUNU");
strcat_s(szName, szName2);
cout << szName << endl;*/
}
객체와 객체 , 객체와 숫자 또는 구조체와 객체 개념 자체가 생소하지만
연산자 오버로딩은 이런것들을 가능하게 해준다 . 연산이나 작업에 대해 간결하게 표기할수있도록 해준다
//프로그래밍 학자들에게 비판을 받는 문법중 하나이다
+는 더하기지만 아예 다른기능으로 구현이 가능하기때문에 실수 유발할수있다
교환법칙 성립된다는 연산에서도 실제구현에선 안될수있다 3d 나 2d 행렬곱을 생각해볼떄...
class CObj
{
private:
int m_iX;
int m_iY;
//int m_iZ;
//객체 추가할때마다 연산자 오버로딩 구현 바꿔줘야한다 개불편함
public:
void Render(void)
{
cout << m_iX << "\t" << m_iY << endl;
}
CObj operator+(int iA)
{
CObj obj(m_iX + iA, m_iY + iA);
return obj;
}
CObj operator+(CObj& robj)
{
CObj obj;
obj.m_iX = robj.m_iX;
obj.m_iY = robj.m_iY;
return obj;
}
public:
CObj(int _x = 0, int _y = 0)
:m_iX(_x), m_iY(_y){;}
};
void main(void)
{
CObj obj(i,2);
cobj,Render(); // 1 2
CObj obj2 = obj + 3;
obj.Render(); // 4 5
CObj obj3 = obj + obj2 ;
obj3.Render(); // 4 5
}
///////////////////////////////////////////////////////////////
namespace myStd
{
static char* endl = "\n";
class ostream
{
public:
ostream& operator << (char* str)
{
printf("%s", str);
return *this;
}
};
};
/////////////////////
class CObj
{
private:
int m_iValue;
public:
CObj operator++()
{
++m_iValue;
return *this;
}
CObj operator++(int)
{
CObj obj(m_iValue);
++m_iValue;
return obj;
}
void Render(void)
{
cout << m_iValue << endl;
}
public:
CObj(int iValue)
:m_iValue(iValue){;}
CObj(CObj& rObj)
{
m_iValue = rObj.m_iValue;
}
~CObj(){;}
};
'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글
메크로함수 (0) | 2015.10.18 |
---|---|
템플릿 (0) | 2015.10.18 |
오버라이딩_virtual2 (0) | 2015.10.13 |
오버라이딩_virtual (0) | 2015.10.13 |
캐스팅연산 (0) | 2015.10.12 |
댓글