본문 바로가기

카테고리 없음

2024000066김태윤 12주차 수업시간과제

모든 자료는 한교수님 수업시간에 나옴.

상속을하게되면 부모의public을 물려받아사요할 수 있다.

#include <iostream> // 입출력을 위한 헤더 파일을 포함합니다.
using std::cout;   // std 네임스페이스의 cout를 사용합니다.

class A            // 클래스 A를 정의합니다. 이 클래스는 기본 클래스(부모 클래스)입니다.
{
private:
    void a1() { cout << "a1\n"; } // private 접근 지정자인 a1 메서드. 외부에서 접근할 수 없습니다.
    void a2() { cout << "a2\n"; } // private 접근 지정자인 a2 메서드. 외부에서 접근할 수 없습니다.
public:
    void b1() { cout << "b1\n"; } // public 접근 지정자인 b1 메서드. 외부에서 접근할 수 있습니다.
    void b2() { cout << "b2\n"; } // public 접근 지정자인 b2 메서드. 외부에서 접근할 수 있습니다.
    void b3() { cout << "b3\n"; } // public 접근 지정자인 b3 메서드. 외부에서 접근할 수 있습니다.
    void b4() { cout << "b4\n"; } // public 접근 지정자인 b4 메서드. 외부에서 접근할 수 있습니다.
};

class B : public A { // 클래스 B를 정의하며, A 클래스를 상속받습니다. B는 A의 자식 클래스입니다.

}; // 클래스 B의 정의가 끝납니다. 현재는 추가적인 멤버가 없습니다.

int main() // 프로그램의 진입점인 main 함수를 정의합니다.
{
    A aa; // 클래스 A의 객체 aa를 생성합니다.
    aa.b1(); // 객체 aa를 통해 b1 메서드를 호출합니다. "b1"이 출력됩니다.
    
    B bb; // 클래스 B의 객체 bb를 생성합니다.
    bb.b1(); // 객체 bb를 통해 b1 메서드를 호출합니다. A에서 상속받은 메서드이므로 "b1"이 출력됩니다.
    
    return 0; // 프로그램을 정상적으로 종료합니다.
}

챗gpt에게 모든줄에 주석을달아 설명해달라고해보았다.

다른언어들 상속

상속은 내가 다 만드는게아니라, 부모로부터 상속을 받아서 추가할것을 추가하여 사용하는것이다.

객체지향 언어에서 상속이란 is-a관계이다.

오른쪽에 있는게 부모이고, 왼쪽의Dog가 자식클래스 이다. 상속접근제어는 private,public,protected 3가지가있다.

c++에서 public을 가장 많이 사용한다.

private는 상속이 되지않는다.(제일중요하다.)

protected와 public은 자식에게 그대로 내려온다(public으로 받았을경우)

기본적으로 상속을 하게되면 부모에있는public부분이 상속된다.private는 안된다.

(챗gpt에게 설명부탁해봄)

private은 해당하는 클래스 안에서만 가지고 놀 수 있다. 그래서 public만 상속 가능하다.

부모의 모든것을 물려받는것은 아니다. 부모가 이거 쓰라고 한거=public

이렇게 부모가 물려주기로 마음먹은것만 가능한것.

pirvate으로 상속을 하게되면 다 넘어가서 다른걸로 변신이 된다(되긴 되는데, 다른놈이 나옴)

private으로 접근 할 수 있지만, public이던 부모도 private으로 오면  모두 private 으로 된다.(예를 들어

부모가 돈을 나누어 가지라고 형한테 주면 동생거도 형이 꿀걱함)다른사람 모르게 자기 자식에게만 비밀리에 상속함

(많이 안씀)

멤버 이니셜라이저( 초기값이 없을떈 int x=1;이 작동해 1이 나오지만, 초기값이 있다면 그게나옴(intx = 1;은 디폴트값 느낌)

시험에 나옴. 2개가 같은 뜻임. 중요함.

생성자를 다른방법으로 알려달라고 했을떄 방금쓴것처럼 이게 나온다. 근데, 요즘은 2번쨰 방법을 많이 쓴다고함(유행)

proteted로 상속을 받게되면, 부모의protected와, public이 모두 protected로 바뀌어 넘어오게 된다(모두 내꺼)

(*public만 있는그대로 넘어오는 좋은놈이다*)

private과,protected의 공통점은 외부에서 접근이 바로 안된다(시험문제 무조건 나옴)중요핑.

프로그램을 잘하는 사람들은 상속할떄 protected를 많이쓴다. 자신과 자신에게만  물려주라면 protected를 쓴다.

public은 모두에게 상속가능,private는 class안에서만( 영역내만)  중요핑.

protected는 외부에선 접근 못하게하고, 자식만 접근 가능하면 자식이 편함.( 많이 쓰도록 노력하도록)

protected와,private의 공통점과차이점 시험에 나옴.

aa.a;,bb.b;를 주석처리해야한다. protected이기에, 파생클래스에선 접근이 불가능하다.

protected를 사용하는것이 멤버속성으론 좋고, 상속은public이 좋다.

챗gpt에게 중요한점을 물어보았다.

부모생성->자식생성->자식소멸->부모소멸

 

계층적 다중상속에선 몇개만 쓰고 이런식으로 한다.

여러 부모사용시 순서

클래스의 멤머변수를 만듦.

부모클래스 만들기

student 클래스 상속받음.

#include <iostream>
using std::cout;
using std::endl;
using std::string;
class Man {
protected:
string name;
int age;
public:
Man(string n,int a) {name = n;age = a;}
void m_show() {
cout << "이름:" << name << endl;
cout << "나이:" << age << endl;
}
};
class Student : public Man {
private:
string ban;
string hak;
public:
Student(string n, int a,string b,string h):Man(n,a) {
ban = b;
hak = h;
}
void s_show() {
m_show();
cout << "반:" << ban << endl;
cout << "학번:" << hak << endl;
}
};
class Teacher : public Man {
private:
string jun;
string dam;
public:
Teacher(string n, int a, string b, string h) :Man(n, a) {
jun = b;
dam = h;
}
void t_show() {
m_show();
cout << "전공:" << jun << endl;
cout << "담당:" << dam << endl;
}
};
//사람클래스로부터 상속받은 학생클래스(Student)를 만드시오.
//(멤버변수:반, 학번), 생성자, 기타함수
//사람클래스로부터 상속받은 교수(Teacher)클래스를 만드시오.
//(멤버변수:전공, 담당과목), 생성자, 기타함수
//main함수에서 학생객체와, 교수객체를 만들어 테스트해보시오.

int main()
{
Student kks("김컴소", 20, "C반", "202012000");
Teacher hsh("한미소", 40, "전산", "C++프로그래밍");

kks.s_show();
hsh.t_show();
return 0;
}