반응형
<< 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 |