11.2 상속의 기본(2) is-a relationship
Person header
#pragma once
#include <string>
#include <iostream>
class Person
{
private:
std::string m_name;
public:
Person(const std::string & name_in = "No Name")
: m_name(name_in)
{}
void setName(const std::string & name_in) // Teacher,Student는 m_name에 접근이 불가능하므로(private이라) Person에 옮겨옴.
{
m_name = name_in;
}
std::string getName() const // Student에서 const로 받기 때문에 뒤에 const를 붙여줘야한다.
{
return m_name;
}
void doNothing() const
{
cout << m_name << " is doing Nothing" << "\n";
}
};
Teacher header
#pragma once
#include "Person.h"
class Teacher : public Person
{
private:
public:
Teacher(const std::string & name_in = "No Name")
: Person(name_in)
{}
void teach()
{
std::cout << getName() << " is teaching" << "\n";
}
friend std::ostream & operator << (std::ostream & out, const Teacher & teacher)
{
//out << teacher.m_name;
out << teacher.getName();
return out;
}
};
Student Header
#pragma once
#include "Person.h"
class Student : public Person
{
private:
int m_intel; //intelligence;
public:
Student(const std::string & name_in = "No Name", const int & intel_in = 0)
//: m_name(name_in), m_intel(intel_in) // m_name은 Person에 속해있으므로 Person에서 생성자를 만들어줘야한다.
: Person(name_in), m_intel(intel_in)
{}
void study()
{
std::cout << getName() << "is studying" << "\n";
}
void setIntel(const int & intel_in)
{
m_intel = intel_in;
}
int getIntel()
{
return m_intel;
}
friend std::ostream & operator << (std::ostream & out, const Student & student)
{
//out << studnet.m_name << " " << student.m_intel;
out << studnet.getName() << " " << student.m_intel;
return out;
}
};
#include "Student.h"
#include "Teacher.h"
int main()
{
std::string name;
Student std("Jack Jack");
std.setName("Jack Jack2");
std.getName();
Teacher teacher1("Dr. H");
teacher1.setName("Dr. K");
std::cout << teacher1.getName() << "\n";
std.doNothing();
teacher1.doNothing();
std.study();
teacher1.teach();
Person person;
person.setName("Mr. Incredible")
//person.study() 부모는 자식의 것을 쓰지 못한다.
return 0;
}