객체지향(OOP)은 프로그래밍을 객체 단위로 나누어 프로그래밍하는 것으로 각각의 객체가 상호작용을 할 수 있다.
클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한 것으로 구조체와 비슷하다고 보면 된다.
더욱 더 자세한 내용은 인터넷과 책을 참고하시길..
클래스는 한 cpp파일 안에 바로 선언하여 사용해도 되지만
코드가 길어지면 여러가지로 헷갈릴 수 있으니 파일을 따로 나누어 선언하기를 추천한다.
비쥬얼스튜디오의 경우 솔루션탐색기에서 프로젝트를 오른쪽으로 누른 뒤 추가 -> 클래스를 선택하면
클래스를 손쉽게 추가할 수 있다.
클래스를 생성하면 헤더파일(.h)과 cpp파일이 생성되는데 헤더파일에서는 변수 및 함수를 선언하고,
cpp파일에서는 해당 함수를 구현(정의)하면 된다.
물론 헤더파일에서 바로 구현할 수도 있다.(짧은 함수는 바로할 수도 있지만 가독성이 떨어지므로 비추천)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #pragma once class CAnimal { public: CAnimal(); CAnimal(int a, int b); CAnimal(const CAnimal &an); ~CAnimal(); void sound(); int getAge(); void setAge(int ag); private : int age; int* weight; }; | cs |
헤더 파일에서는 위와 같이 변수 및 함수를 선언해준다.
선언은 구조체와 마찬가지로 선언하면 되는데 클래스에는 private, public, protected라는 것이 존재한다.
private는 개인적인것. 즉 클래스 안에서만 접근 가능한 변수, 함수를 뜻한다.
public은 공개된것. 즉 누구나 사용할 수 있는것을 말한다.
protected는 보호된것으로 상속받은 자식과 자기자신만 접근 가능하며 외부에서는 접근이 불가능하다.
구조체는 누구나 사용할 수 있으므로 항상 public이라면
클래스는 상황에 따라 여러가지를 사용할 수 있다고 생각하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include "Animal.h" #include <iostream> CAnimal::CAnimal() { age = 10; weight = new int; *weight = 15; } CAnimal::CAnimal(int a, int b) { age = a; weight = new int; *weight = b; } CAnimal::CAnimal(const CAnimal &an) { age = an.age; weight = new int; *weight = *an.weight; } CAnimal::~CAnimal() { delete weight; } void CAnimal::sound() { std::cout << age << std::endl; std::cout << *weight << std::endl; } int CAnimal::getAge() { return age; } void CAnimal::setAge(int ag) { age = ag; } | cs |
cpp파일에서는 헤더파일에서 선언한 변수를 사용하거나 함수를 정의할 수 있다.
클래스에는 생성자와 소멸자라는 것이 존재하는데, 클래스의 이름과 똑같은 함수를 볼 수 있을 것이다.
클래스이름과 똑같은 함수. 즉 CAnimal()은 생성자라고 하며 클래스가 생성되면 불리는 함수로서
주로 헤더에서 선언해둔 변수의 초기화를 주로 한다.
생성자 앞에 물결표시가 붙은 함수. 즉 ~CAnimal()은 소멸자라고 하며 클래스가 사라질때 불리는 함수이다.
동적할당을 했다면 소멸자에서 delete 시켜주면 메모리문제없이 소멸시 할당을 풀어줄 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include "Animal.h" #include <iostream> using namespace std; void main() { CAnimal dog; dog.sound(); cout << dog.getAge() << endl; CAnimal* cat = new CAnimal(5, 6); cat->sound(); CAnimal cat2 = *cat; delete cat; cat2.sound(); } | cs |
이후 메인문에서 클래스를 사용하고 싶다면 해당클래스의 헤더파일을 include한 뒤
구조체와 마찬가지로 자료명쓰듯이 사용하면 된다.
'프로그래밍 공부 > C++' 카테고리의 다른 글
연산자 오버로딩 (0) | 2018.03.21 |
---|---|
클래스 사용예제 (0) | 2018.03.21 |
동물 스무고개(?) (Tree연습 예제) (0) | 2018.03.21 |
Tree (재귀함수 이용) (0) | 2018.03.21 |
Linked List (구조체 이용) (0) | 2018.03.21 |