티스토리 뷰

Programing/C++

C++ 클래스 _ 기초

live2skull 2016. 8. 4. 17:14

** 어셈블러 언어 분석은 Handray 에서 다시 다룸 (컴파일러에 따라 예상했던것과는 코드가 많이 달라짐)


클래스 사용 - 기초

#include "stdafx.h"
#include "malloc.h"
#include "string.h"
#define SZ_ALLOC_CHAR 10

class student
{
private:
	int age;

public:
	char* name;
	char* university;

	void SetInfo(char* _name, int _age, char* _university)
	{
		 strncpy(name, _name, SZ_ALLOC_CHAR);
		 strncpy(university, _university, SZ_ALLOC_CHAR);
		 age = _age;
	}
	void About();
	void Upgrade();
	student()
	{
		name = (char *)malloc(SZ_ALLOC_CHAR);
		university = (char *)malloc(SZ_ALLOC_CHAR);
	}
	~student()
	{
		free(name);
		free(university);
	}
};

void student::About()
{
	printf("Name : %s, University : %s Age:%d\n", name, university, age);
}

void student::Upgrade()
{
	age++;
}

int main()
{
	student l2ttlebit; // in stack
	l2ttlebit.SetInfo("내이름", 20, "??");
	l2ttlebit.About();
	l2ttlebit.Upgrade();
	l2ttlebit.About();

	return 0;
}
1. 클래스 선언
class __MYCLASSNAME
{
};
와 같이 선언하고, 괄호 안에는 선언할 변수, 함수(메소드) 등을 쓴다.


2. 접근자
OOP(객체 지향 프로그래밍) 의 특징 중 하나인 추상화(캡슐화, 정보 은닉) 을 위해 C++에서는 다양한 접근 제공자를 제공한다.

public : 어디에서나 접근가능

protected : 상속된 자식클래스까지만 접근가능

private : 내부 접근만 가능

friend : (friend _CLASSNAME) _CLASSNAME으로 지정된 클래스에서는 본 클래스에 직접 접근이 가능하다. ex


 

3. 변수, 메소드 선언

선언하고자 할 변수나 메소드를 적용할 접근자: 안에 써주면 된다.

단, 이때 접근자를 써주지 않았다면 기본적으로 private 접근자가 자동적으로 적용된다.


메소드를 선언할 때, 메소드의 코드가 길어져 class 안의 구조를 알아보기 힘들어 질 수 있는데, 이러한 상황을 방지하기 위해 C++에서는 메소드를 선언하는 두 가지 방법을 제공하고 있다.

첫번째는 인라인 선언 방법으로 메소드의 형식과 인자를 선언 후, 코드까지 그대로 같이 써주는 방법이다. (ex - student::SetInfo)

두번째는 메소드의 형식과 인자만 먼저 class 안에 선언해 주고, 메소드의 코드는 class 밖에서 작성하는 방법이다.

이 때, _CLASSNAME::_FUNCNAME 식으로 클래스 이름과 함수 이름 사이에 "::" 연산자를 이용해 주면 된다.



4. 클래스 생성자, 소멸자

클래스 생성자 : 클래스의 인스턴스가 생성될 때 실행되고,

클래스 소멸자 : 클래스의 인스턴스가 소멸될 때 실행된다.

생성자와 소멸자는 반드시 외부에서 접근할 수 있도록 public 한정자를 통해 선언되어야 한다.

위 예제처럼 char* 포인터의 경우, 문자열을 저장하기 위해 필요한 메모리를 할당받기를 원할 경우, 생성자에서 자동으로 malloc을 통해 메모리를 할당해 줌으로써 불편함을 해소할 수 있다.

이는 역시 해당 인스턴스의 사용을 완료했을 때, heap에 할당된 메모리를 free하여 memory leak을 방지하기 위해 소멸자에 free로 메모리를 해제해 줌으로써 불편함을 해소할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함