C++

C++ 프로그래밍 13주차

kimbh 2023. 11. 30. 16:24

실습1 protected 접근 제어 속성 예시

protected와 private 멤버 속성의 차이점 기말고사 1번 문제임으로 참고하면 좋음.

실습2 상속 심화

#include <iostream>
using std::cout;
using std::endl;
class A1 // 아버지
{
	int a;
public:
	A1(int i) { a = i; }
	int getA() { return a; }
};
class A2 // 어머니
{
	int b;
public:
	A2(int i) { b = i; }
	int getB() { return b; }
};
class B :public A1, public A2
{
	// 기본 클래스 A1과 A2로부터
	// 상속 받은 파생 클래스
	int c;
public:
	B(int i, int j, int k) :A1(i), A2(j) { c = k; }
	// i는 기본클래스 A1의 생성자로,
	// j는 기본클래스 A2의 생성자로
	// 각각 매개변수 전달
	void show() {
		cout << getA() << ' ' << getB() << ' ' << c << endl;
	}
};
int main()
{
	B bb(1, 2, 3);
	bb.show();
	return 0;
}

#include <iostream>
using std::cout;
using std::endl;
class B1 { //아버지
	double d;
public:
	B1(double dd) { d = dd; }
	double getD() { return d; }
};
class B2 { //어머니
	int i;
public:
	B2(int ii) { i = ii; }
	int getI() { return i; }
}; 
class D :public B1, public B2 {
	char c;
public:
	D(double dd, int ii, char cc) :B1(dd), B2(ii)
	{
		c = cc;
	}
	void print() {
		cout << "Double : " << getD() << endl;
		cout << "Int : " << getI() << endl;
		cout << "Char : " << c << endl;
	}
};
int main()
{
	D d(1.23, 10, 'H');
	cout << d.getD() << ',' << d.getI() << endl;
	d.print();
	return 0;
}

#include <iostream>
using std::cout;
class A1 // 기본 클래스 1
{
	int a;
public:
	A1() { cout << "A1의 생성자.\n"; }
	~A1() { cout << "A1의 소멸자.\n"; }
};
class A2 // 기본 클래스 2
{
	int b;
public:
	A2() { cout << "A2의 생성자.\n"; }
	~A2() { cout << "A2의 소멸자.\n"; }
};
class B : public A2, public A1
	// 기본 클래스 1과 2로부터
	// 상속 받은 파생 클래스
{
	int c;
public:
	B() { cout << "B의 생성자.\n"; }
	~B() { cout << "B의 소멸자.\n"; }
};
int main()
{
	B bb;
	return 0;
}

 

#include <iostream>
using std::cout;
#include <string>
class Name { //기본 클래스는 이름만 처리
	std::string name;
public:
	void get_name(std::string s) { name = s; }
	void print_name() { cout << name << "의 전화번호는"; }
};
class Phone : public Name { //파생클래스는 전화번호처리
	std::string phone;
public:
	void get_phone(std::string s) { phone = s; }
	void print_phone() {
		print_name();
		cout << phone;
	}
};
int main()
{
	Phone h;
	h.get_name("Smile Han");
	h.get_phone("1234-5678");
	h.print_phone();
	return 0;
}

파란색 사각형으로 그려진 것이 클래스 다이어그램임, 시험기간에 나오니 참고할 수 있도록. (어떻게 상속받는지에 대해서 생각을 해야함)

#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class Man {
	string name; //private 자동으로 만들어짐
	int age;
public:
	Man(string name, int age) {
		this -> name = name;
		this -> age = age;
	}
	void m_show();
};
void Man::m_show() {
	cout << "이름: " << name << endl;
	cout << "나이: " << age << endl;
}

Man (사람 이름, 나이 멤버 변수) 클래스 완성

 

Man 부모 클래스와 자식 클래스(Student와 Teacher) 완성

#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class Man {
	string name; //private 자동으로 만들어짐
	int age;
public:
	Man(string name, int age) {
		this -> name = name;
		this -> age = age;
	}
	void m_show();
};
void Man::m_show() {
	cout << "이름: " << name << endl;
	cout << "나이: " << age << endl;
}
class Student:public Man{
	string ban;
	string hak;
public:
	Student(string name, int age, string ban, string hak) : Man(name,age){ // 생성자 생성
		this->ban = ban;
		this->hak = hak;
	}
	void s_show();
};
void Student::s_show() {
	m_show();
	cout << "반: " << ban << endl;
	cout << "학번: " << hak << endl;
}
class Teacher :public Man {
	string major;
	string subject;
public:
	Teacher(string name, int age, string m, string s) : Man(name, age){ // 생성자 생성
		major = m;
		subject = s;
	}
	void t_show();
};
void Teacher:: t_show() {
	m_show();
	cout << "전공: " << major << endl;
	cout << "담당과목: " << subject << endl;
}

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

실습3 클래스 다이어 그램

-(마이너스) = private , #(샵) = protected, +(플러스) = public

 

실습4 OverRiding(가상함수 : virtual function)

 

#include <iostream>
using std::cout;

class Dot {
public:
    virtual void draw() {
        cout << "Dot::draw()\n";
    }

    void print() {
        cout << "Dot 클래스\n";
        draw();
    }
};

class Line : public Dot {
public:
    void draw() override {
        cout << "Line::draw()\n";
    }
};

int main() {
    Line line;
    line.print();
    return 0;
}

virtual은 부모클래스에 사용하고

자식 클래스에서는 안써도 되고 쓰게 된다면 void draw() 하고 이 부분에 override라고 해야함{cout<<"Line::draw()\n";}

이 방법은 c++2011부터 시작한 새로운 키워드임.

 

 

 

 

 

'C++' 카테고리의 다른 글

C++ 15주차  (0) 2023.12.14
C++ 14주차  (0) 2023.12.07
C++프로그래밍 12주차  (0) 2023.11.23
C++ 프로그래밍 11주차  (0) 2023.11.16
C++ 10주차  (1) 2023.11.09