객체지향(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(56);
    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
Posted by misty_
,