DNF LOVE

[C++문법] Class, 추상 클래스, 인터페이스 상속 등 사용하기 본문

Programming/C++

[C++문법] Class, 추상 클래스, 인터페이스 상속 등 사용하기

botho 2019. 10. 23. 21:46
반응형

1. 클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메서드로 정의하는 것, 객체를 담아두는 그릇

class Person {
public :
	string name;
	int age;

	Person() {
		this->name = "";
		this->age = 0;
	}
	Person(string name, int age) {
		this->name = name;
		this->age = age;
	}
	void printALL() {
		cout << name << " " << age << endl;
	}
};


int main() {

	Person p1("김아무개", 20);
	p1.printALL();

	return 0;
}

 

2. 추상 클래스 : 생성자, 멤버변수, 일반 메서드를 자유롭게 사용할 수 있으며 여기에 1개 이상의 추상 메서드가 포함되어 있는 메서드

** 추상 메서드 : 하나의 변수명, 함수 명 등이 상황에 따라 다른 의미로 해석될 수 있는 다형성에 기반하여 부모 클래스의 메서드와 같은 이름 매개변수를 재정의하여 자식 속성에 맞게 함수를 구현할 수 있도록 하는 메서드이다.

** 추상메서드를 사용하는 이유는 해당된 속성을 반드시 사용하여 재정의를 해야하는 필요가 있기 때문이다.

class Animal {
public :
	// 일반 멤버 변수
	string name;
	Animal(string name) {
		// 생성자 사용 가능
		this->name = name;
	}
	Animal() {}; // 생성자
	~Animal() {}; //소멸자

	void print() {
		// 일반 함수 사용 가능
		cout << name << endl;
	}

	// 가상 함수
	virtual void cry() = 0;
};

class Dog : public Animal {
public :
	virtual void cry() {
		cout << "멍멍 이건 강아지 울음소리 Animal부모 클래스를 받아서 오버라이딩 하기" << endl;
	}
};

class Cat : public Animal {
public :
	virtual void cry() {
		cout << "야용 이건 고양이 울음소리 Animal부모 클래스를 받아서 오버라이딩 하기" << endl;
	}
};

int main() {
	// Animal a; // 추상 클래스는 단일로 선언할 수 없다.
	Dog d;
	d.cry();
	Cat c;
	c.cry();
}

3. 인터페이스 : 오로지 추상 메서드만으로 이루어져 있다.

class Animal {
public :
	virtual void cry() = 0;
	virtual void gender() = 0;
};

class Dog : public Animal {
public :
	virtual void cry() {
		cout << "멍멍 이건 강아지 울음소리 Animal부모 클래스를 받아서 오버라이딩 하기" << endl;
	}
	virtual void gender() {
		cout << "Gender?? " <<endl;
	}
};

class Cat : public Animal {
public :
	virtual void cry() {
		cout << "야용 이건 고양이 울음소리 Animal부모 클래스를 받아서 오버라이딩 하기" << endl;
	}
	virtual void gender() {
		cout << "Gender?? " << endl;
	}
};

int main() {
	Dog d;
	Cat c;
	d.gender();
	c.cry();
	return 0;
}

 

반응형