C++ 도움을 선배님들께 간청드립니다

인사 올리겠습니다 선배님들!
가입 첫 글이 질문이라 송구스럽습니다ㅜ

이제 C언어를 공부하는 학생인데 과제가 너무 어려워 하루가 지나도록
해결하지 못하고 있습니다!

우선 <클래스이름 * 변수 > 이녀석을 변수로 선언시키면 계속해서 오류가 나고,
상속을 받고 부모 클래스의 변수는 private인데 어떻게 print 할 때 위는 <과목>
밑은 <전공과목> 이렇게 다르게 띄우는지 도무지 혼자는 해결이 어렵습니다ㅜ

도움을 주실 수 있으면 제 컴퓨터 인생 한줄기 빛이 될 것 같습니다
감사합니다

안녕하세요.

일단 하나씩 차근차근해보세요.

먼저 subject 클래스를 만들어보세요.
만드신다음에 코드 올려주시면 검토해드리겟습니다 ㅎㅎㅎ


몇 가지 테스트하다 이렇게 뼈대만 잡았는데
이유는 몰라도 틀렸다는 것 만큼은 확실한 것 같습니다!
this. 를 써야 해결되는 문제일까요?ㅜ

1 Like

잘하셨어요. ^^/

#include <iostream>
#include <string>

class Subject {
	std::string name;
	Subject* pre;
public:
	Subject(std::string& n, Subject* p)
		: name(n), pre(p) {}

	void Print() {
		std::cout << "과목: <" + name + ">" << std::endl;
		if (pre) {
			std::cout << "선수 ";
			pre->Print();
		}
	}
};

class Major : public Subject {

public:
	Major(std::string& n, Subject* p)
		: Subject(n, p) {}

	void Print() {
		std::cout << "전공 ";
		Subject::Print();
	}
};

int main() {
	std::string math = "math";
	std::string eng = "english";
	std::string db = "database";
	std::string dbp = "database programming";

	Subject a(math, nullptr);
	Subject b(eng, &a);
	Major c(db, nullptr);
	Major d(dbp, &c);
	a.Print();
	b.Print();
	c.Print();
	d.Print();
}

일단 가장 먼저 보셔야할 부분은 C++에서 어떻게 부모의 생성자를 호출하는가죠?

Major(std::string& n, Subject* p)
: Subject(n, p) {}

이렇게 합니다.

그 다음 출력하는 Print부분은 어느정도 하실수 있으실테고…
자식 클래스에서 부모클래스 맴버변수인 name, pre에 접근할 수 없죠. private이니까요.

그래서 Major 클래스는 Subject 클래스의 Print()함수를 호출해야합니다.

이렇게요.

아시다시피 C++에서는 super키워드가 없죠. 그래서 위와 같이 사용해야합니다.

정말 진심으로 감사드립니다!!
마지막 퍼즐이 맞추어졌습니다!!

인사 박고 다음번에 또 찾아오겠습니다
( _ _ )

감사합니닷!!

도움이 되었다니 다행이네여

열공하세요~ ^^