카테고리 없음

202208206이종윤 12주차 c프로그래밍 12주차과제

jong133 2024. 11. 19. 13:47

상속을해서 부모의 클래스를 받을수있다.
위 소스에 대한 설명을 뤼튼한테 제공 받아보았다.

자바나 C++ 파이썬,JAVAScript나  C#에서 상속의 기본예제를 작성해줘라고 뤼튼에게 물어보았다.

상의개념인 부모로 부터 상속을 받아서 새로운 클래스를 보다 쉽게 만들 수있다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

상속 관계는 다른말로 is-a 관계라고한다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

Animal 기본클래스명, public 상속 접근제어,Dog 자식클래스

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

상속이되면 다 상속이되는게 아니고 부모의 private부분은 상속이 되지않는다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

public위에 int개체는 private 소속이고 아무것도 없는것처럼 보이나 부모의 상속으로 인해 public내용이 그대로 복사되어 숨겨져있다. 자식이 부모클래스를 상속을 받으니 에러가 안뜨는 것이다. 결론적으로 기본적으로 상속을 하게되면 부모에 있는 public부분이 상속이된다. private은 상속이 안된다.
bb.x = 1, bb.y =2등등 이런식은 에러가뜨지만 setX()를 쓰면 해당하는 클래스 안에서쓰는거기때문에 에러가 안뜬다. 즉 해당하는 클래스안에서만 써야된다.
private으로 상속을 하게되면 나머지 protected나 public이 변신을 해서 들어가게 된다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

 

private에서 상속을 하게 되면 상속이 되긴되지만 자식public에서 복사를 하면 private으로 복사가 되서 외부에서 접근이 안된다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

=1을 지우고 하니 쓰레기값이 나온다.
=1하니 초기값을 주지않아도 1이 정직하게 뜬다.
시험에 나오는 중요한 문제 생성자를 생성하는 두가지 방법이있는데 8줄에있는 방법은 옛날부터 써왓던 구버전방식이고 9줄에있는 생성자 방법이 최신방식이다. 둘이 결국은 같은 뜻이고 둘다 같이 쓰면안된다.
protected로 상속을 받게되면 public이나 private 자식이 다 protected로 바껴서 넘어온다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

private,protected은 외부에서 접근이 불가한 공통점이있다.
이제부터 private자리에 protected을 쓸것이다. 고수들이 하는방식 protected는 상속이 되기때문에 자기 자식까지 열어주는 접근 속성이다. 그에 반대로 public은 다 감추기때문에 protected를 더많이 쓴다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

 

protected와 private의 공통점은 둘다 외부에서는 접근이 안되고,차이점은 protected가 상속이 되서 자식이 접근할수있다.

protected는 외부에서는 public과 똑같에서 바로 접근할수가없다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

•기본 클래스 생성자는 파생 클래스 생성자보다  먼저 실행되고, 소멸자는 역순으로 실행된다.
부모클래스의 a값이 초기화가 되서 부모생성자가 먼저 호출이되서 자식이 ~A가 위에 public으로 올라간다.
매개변수 전달을 위해 자식쪽에서 위로 값을 넘겨줘야된다.

출처:https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

 

Smile Han

 

www.youtube.com

부모가 여럿일때 ,로 따로 써주면된다.
A2,A1으로 순서를 바꾸면 역시 결과값이 순서가 반대로나온다.
이렇게해서 부모클래스는 완성이 됬다.
스튜던트클래스를 부모로부터 상속받아서 다 만들었다. 일부분은 부모기능 나머지 자기기능
//사람클래스(Man, 멤버변수:이름, 나이)를 만드시오. //멤버변수를 초기화하는 생성자를 구현하시오. //기타 함수를 구현하시오. //사람클래스로부터 상속받은 학생클래스(Student)를 만드시오. //(멤버변수:반, 학번), 생성자, 기타함수 //사람클래스로부터 상속받은 교수(Teacher)클래스를 만드시오. //(멤버변수:전공, 담당과목), 생성자, 기타함수 //main함수에서 학생객체와, 교수객체를 만들어 테스트해보시오.

문제를 풀어보았다.

#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 juen;
string dam;
public:
Teacher(string n, int a, string j, string d) : Man(n, a) {
juen = j;
dam = d;
}
void t_show() {
m_show();
cout << "전공 : " << juen << endl;
cout << "담당과목 : " << dam << endl;
}
};
int main()
{
Student kks("김컴소", 20, "C반", "202012000");
Teacher hsh("한미소", 40, "전산", "C++프로그래밍");

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