상속을 통해 다른 클래스의 정보를 물려 받아 사용할 수 있음

Derived의 생성자는 초기화 리스트에서 Base 생성자를 호출해서 Base의 생성을 먼저 처리한 후에, Derived의 생성자가 실행됨. #include <iostream>
#include <string>
class Base {
std::string s;
public:
Base() : s("기반") { std::cout << "기반 클래스" << std::endl; }
void what() { std::cout << s << std::endl; }
};
class Derived : public Base {
std::string s;
public:
Derived() : Base(), s("파생") {
std::cout << "파생 클래스" << std::endl;
// Base 에서 what() 을 물려 받았으므로
// Derived 에서 당연히 호출 가능하다
what();
}
};
int main() {
std::cout << " === 기반 클래스 생성 ===" << std::endl;
Base p;
std::cout << " === 파생 클래스 생성 ===" << std::endl;
Derived c;
return 0;
}

출력 결과는 위와 같음.
Derived의 what 함수를 호출했을 때, what 함수는 Base에 정의되어 있기 때문에 Base s가 출력된 것!
Derived 안에서 what을 호출하면 마지막 line 파생으로 출력할 수 있음.
public:
Derived() : Base(), s("파생") {
std::cout << "파생 클래스" << std::endl;
// Base 에서 what() 을 물려 받았으므로
// Derived 에서 당연히 호출 가능하다
what();
}
void what() { std::cout << s << std::endl; }
Derived의 what 함수가 Base의 what 함수를 오버라이딩 한 것상속받는 클래스에서는 접근 가능하고, 그 외의 기타 정보는 접근 불가능
public
외부에서 접근 가능
private
외부에서 접근 불가능하며, 자기 자신의 class에서만 접근 가능
protected
외부에서 접근 불가능하지만, 상속받은 경우 접근 가능
private < protected < public 수준의 상속 정도
class Derived : public Base
#include <iostream>
#include <string>
class Base {
public:
std::string parent_string;
Base() : parent_string("기반") { std::cout << "기반 클래스" << std::endl; }
void what() { std::cout << parent_string << std::endl; }
};
class Derived : private Base {
std::string child_string;
public:
Derived() : child_string("파생"), Base() {
std::cout << "파생 클래스" << std::endl;
}
void what() { std::cout << child_string << std::endl; }
};
int main() {
Base p;
// Base 에서는 parent_string 이 public 이므로
// 외부에서 당연히 접근 가능하다.
std::cout << p.parent_string << std::endl;
Derived c;
// 반면에 Derived 에서는 parent_string 이
// (private 상속을 받았기 때문에) private 이
// 되어서 외부에서 접근이 불가능하다.
std::cout << c.parent_string << std::endl;
return 0;
}
따라서 위와 같은 경우, parent_string이 private 상속을 받았기 때문에 private이 되어서 외부에서 접근 불가능