프로그래밍 언어/C++
[C++] 다이아몬드 다중상속
까망 하르방
2025. 3. 10. 00:32
반응형
[예시] 다이아몬드 다중 상속
#include <iostream>
#include <string>
class File
{
public:
std::string filename;
void open() {}
};
class InputFile : public File
{
public:
void read() {}
};
class OutputFile : public File
{
public:
void write() {}
};
class IOFile : public InputFile, public OutputFile
{
public:
};
int main()
{
IOFile file;
file.open(); // error
}
상속 형태
[IOFile] → [InputFile], [OutputFile] → [File]
만약에 IOFile file 에서는 File 객체가
[InputFile], [OutputFile] 각각 만들어져 있다.
이는 file.open() 에서 어떤 객체의 open() 을 수행할지 알 수 없다.
즉, 개발자는 File 클래스에서 open() 함수를 두었지만
다중 상속하면서 file 인스턴스가 2번 메모리에 놓이면서
open() 함수가 어느 클래스인지 알 수 없는 상황
virtual 상속
File의 인스턴스가 메모리에 한번만 생성되게 한다.
[예제]
#include <iostream>
#include <string>
class File
{
public:
std::string filename;
void open() {}
};
class InputFile : virtual public File // virtual 상속
{
public:
void read() {}
};
class OutputFile : virtual public File // virtual 상속
{
public:
void write() {}
};
class IOFile : public InputFile, public OutputFile
{
public:
};
int main()
{
IOFile file;
file.open(); // ok
}
📌 [C++] 다중 상속 (multiple inheritance)
[C++] 다중 상속 (multiple inheritance)
다중 상속 (multiple inheritance)• 클래스 2개 이상의 기반 클래스 상속 하는 것• Java, C# 에서는 지원하지 않지만 C++에서는 다중 상속 지원 [예제] 다중상속class InputFile{public: void read() {}};class OutputFil
zoosso.tistory.com
반응형