IT 프로그래밍/C++

[c++] 상속받은 함수를 오버라이딩 하기

기술1 2024. 5. 27. 10:15
반응형

<< operator 적용

#include <iostream>
using namespace std;


class Base
{
protected:
	int m_i;

public:
	Base(int value)
		: m_i(value)
	{}

	void print()
	{
		cout << "I'm base" << endl;
	}

	friend std::ostream& operator << (std::ostream& out, const Base& b)
	{
		out << " This is base output" << endl;
		return out;
	}
};

class Derived : public Base
{
private:
	double m_d;

public:
	Derived(int value)
		: Base(value)
	{}

	void print()
	{
		Base::print();
		cout << "I'm derived" << endl;
	}

	friend std::ostream& operator << (std::ostream& out, const Derived& b)
	{
		out << " This is derived output" << endl;
		return out;
	}
};

int main()
{
	Base base(5);
	cout << base;

	Derived derived(7);
	cout << derived;
	return 0;
}

 

 

cout << static_cast<Base>(b)

이렇게 해주면 위에 있는 operator << 를 자식 클래스에서 사용이 가능합니다. 

 

상속받은 함수를 감추기

using Base::m_i;

 

이것을 Derived에 넣어주면 m_i가 Derived안에서 public이 되어 버립니다. 이것이 상속된 유도 클래스에서 바꿀 수도 있습니다. 

class Derived : public Base
{
private:
	double m_d;

public:
	Derived(int value)
		: Base(value)
	{}

	using Base::m_i;
};

이렇게 사용해주면 되는 것입니다. 그러면 int main에서 Derived에서 m_i를 사용할 수 있습니다. 

 

#include <iostream>
using namespace std;


class Base
{
protected:
	int m_i;

public:
	Base(int value)
		: m_i(value)
	{}

	void print()
	{
		cout << "I'm base" << endl;
	}
};

class Derived : public Base
{
private:
	double m_d;
	using Base::print;

public:
	Derived(int value)
		: Base(value)
	{}

	using Base::m_i;

private:
	void print() = delete;
};

int main()
{
	Base base(5);
	base.print();


	return 0;
}

이렇게 상속받은 것을 여러모로 조절을 해서 사용을 하고 안하고를 할 수 있습니다. 

 

반응형

'IT 프로그래밍 > C++' 카테고리의 다른 글

[C++] 가상 소멸자  (0) 2024.05.28
[c++] virtual 함수  (0) 2024.05.28
[c++] 따배시 상속과 접근 지정자  (0) 2024.05.27
[따배시 11.1 c++] 상속의 기본1  (0) 2024.05.26
[c++] 2702번 초6 수학  (0) 2024.05.25