티스토리 뷰
** 어셈블러 언어 분석은 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;
}
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로 메모리를 해제해 줌으로써 불편함을 해소할 수 있다.
'Programing > C++' 카테고리의 다른 글
C++ 클래스와 구조체의 차이 (0) | 2016.08.06 |
---|---|
C++ 클래스 _ 상속, 오버라이딩 (0) | 2016.08.05 |
C++ 객체지향 프로그래밍(OOP) (0) | 2016.08.03 |
C++ Assert를 이용한 프로그램 디버깅 (0) | 2016.08.02 |
C++ 함수 오버로딩, 오버라이딩 (0) | 2016.08.01 |