본문 바로가기
IT 컴퓨터_프로그램 /c++

연산자 오버로딩

by 건축직일상 2015. 10. 18.

#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;

}

};

};

void    main(void)
{
cout << "NAM" << myStd::endl;

}


/////////////////////

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(){;}

};

void    main(void)
{
CObj    obj(10);
++obj;
obj++;
obj.Render(); // 12
}


'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글

메크로함수  (0) 2015.10.18
템플릿  (0) 2015.10.18
오버라이딩_virtual2  (0) 2015.10.13
오버라이딩_virtual  (0) 2015.10.13
캐스팅연산  (0) 2015.10.12

댓글