[cpp] 가상함수
- 상속에 관련
- 모클래스에서 vitual로 선언되고 기능도 정의됨
- 자클래스에서 다시 재정의되면 자클래스의 것으로 기능이 대체됨
- virtual로 선언하지 않으면 자클래스에서 같은 이름으로 재정의를 해도 모클래스의 같은 이름의 함수가 기능을 대체
- 순수가상함수 : 정의되지 않은 가상함수
virtual void Draw()=0;
* 오버로딩(Overloading) - 인수 목록이 다른 함수를 같은 이름으로 중복 정의
이미 있는 함수에 하나를 더 추가하는 것
중복정의
* 오버라이딩(Overriding) - 상속받은 멤버 함수를 재정의하는 기법
이미 있는 함수를 무시하고 새로 만드는 것
재정의
virtual
class Base{public: void OutMessage() { printf("Base Class\n"); }};
class Derived : public Base{public: void OutMessage() { printf("Derived Class\n"); }};
void main()
{
Base B,*pB; Derived D;
pB=&B;
pB->OutMessage();
pB=&D;
pB->OutMessage();
}
결과 =
Base Class
Base Class <- virtual로 선언해야 Derived Class가 출력됨
* 연산자 오버로딩
CString 소스 참조
선언 – operator 사용
<afx.h>
const CString& operator+=(const CString& string);
friend CString AFXAPI operator+(const CString& string1, const CString& string2);
정의 – 일반 함수처럼 정의
<strcore.cpp>
const CString& CString::operator+=(const CString& string)
{
ConcatInPlace(string.GetData()->nDataLength, string.m_pchData);
return *this;
}
CString AFXAPI operator+(const CString& string1, const CString& string2)
{
CString s;
s.ConcatCopy(string1.GetData()->nDataLength, string1.m_pchData,
string2.GetData()->nDataLength, string2.m_pchData);
return s;
}
* friend 함수, friend 클래스
scrap from : http://cafe.naver.com/comstudy21.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=91
=> friend가 붙은 함수나 class는 자신의 모든 멤버를 접근 지정자와 관계없이 사용 할 수 있도록 권한을 부여
※ friend함수나 friend클래스는 상속이 불가능 하다.
※ friend함수 & 클래스는 클래스 내의 어디든 선언이 가능하다.
class A
{
int a;
public:
A(int _a)
{
a = _a;
}
friend class K;
friend void fct(A a);
};
class K
{
public:
void kk(A &a);
};
void K::kk(A &a)
{
a.a++;
cout<<"kk함수에서 접근한 a : "<<a.a<<endl;
}
void fct(A a)
{
cout<<"fct함수에서 접근한 a : "<<a.a<<endl;
}
void main()
{
A a(5);
K k;
k.kk(a);
fct(a);
}
'Code' 카테고리의 다른 글
Visual Studio 2008(vc9) 설정을 Visual Studio 6(vs6)으로 바꾸기 (0) | 2008.11.05 |
---|---|
[delphi] 델파이 DLL을 VC++에서 사용하기 (0) | 2008.11.05 |
Installing VS6 without the Java VM (0) | 2008.11.05 |
[delphi] 델파이창 여러개 띄우기 (0) | 2008.11.05 |
[vc6] VC6에서 최신(XP) DDK 사용 (0) | 2008.11.05 |