티스토리 뷰

함수는 파라미터가 다르면 overriding 할 수 없다.

 

이문제를 해결하기 위해서는 코드에다가 "override"를 추가해줘야 한다.

 

추가하게 되면 오버라이드 안되는 이유를 ide에다가 표시해준다.

 

class B : public A
{
	public:
	void print(short x) override // int x로 교체해줘야함
	{ 
		cout << "B" << endl;
	}
};

 

따라서, 오버라이드를 하는 함수의 경우 의도적으로 override를 적어주게 되며 코드의 가독성을 높힐 수 있다.

 

 

 

final 키워드의 경우 하위 클래스의 친구들이 final 된 함수를 사용할 수 없게 된다.

 

class C : public B
{
	public:
	void print() final { cout << "C" << endl;}
};

 

 

#include <iostream>
using namespace std;

class A
{
	public:
	void print() { cout << "A" << endl;}
	virtual A* getThis() { 
		cout << "A::getThis()" << endl;
		return this;}
};

class B : public A
{
	public:
	void print() 
	{ 
		cout << "B" << endl;
	}
	virtual B* getThis() { 
	cout << "B::getThis()" << endl;
	return this; }
};

class C : public B
{
	public:
	void print() { cout << "C" << endl;}
	virtual C* getThis() { 
	return this; }
};

class D : public C
{
	public:
	void print() { cout << "D" << endl;}
};

int main()
{
	A a;
	B b;
	C c;
	D d;
	
	A &ref = b;
	b.getThis()->print();
	ref.getThis()->print();
	
	cout << typeid(b.getThis()).name() << endl;
	cout << typeid(ref.getThis()).name() << endl;

	
	return 0;
}

// B::getThis()
// B
// B::getThis()
// A
// P1B
// P1A

 

B의 getThis()가 실행되고 A가 나오는 이유는 무엇일까?

 

ref가 A라서 B의 포인터라도 내부적으로 A의 포인터로 변환하여 리턴하는것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함