Contents

Develop
2003.04.23 10:48

[c++] 기초강좌 #04(클래스)

Views 11836 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

class 만들기

class Myclass{ // Myclass를 정의한다.

int a;

int b;

};

Myclass my; // Myclass변수 my를 정의한다.

위의 예에서 Myclass 는 class이고 my는 Myclass형 변수가 된다.

클래스 이름은 대문자로 시작하도록 하자. ( Myclass )

a, b는 클래스의 멤버 변수라고 한다.

my는 멤버 변수 a, b를 가지게 된다. 즉 my.a , my.b를 가진다.

class와 struct의 비교

구조체

클래스

struct mystruct{

int a;

int b;

};

class myclass{

int a;

int b;

};

struct mystruct mys;

또는,

mystruct mys;

class myclass myc;

또는,

myclass myc;

필드

멤버

mys. a 와 mys. b

myc. a 와 myc. b

표에서도 알 수 있듯이 구체와 클래스는 아주 비슷하다. 그러나 구조체는 단순한 자료의 집합이고 클래스는 동작(함수)을 포함한다.

접근 지정자(공용과 전용)

구조체는 멤버가 디폴트로 공용(public)이다. 그러나 class는 디폴트로 전용(private)이다.

위의 구조체, 클래스 비교 표에서 mys. a 와 mys. b는 공용이고, myc. a 와 myc. b는 전용으로 엑세스 보호된다. 다시말하면 클래스 외부에서 멤버를 엑세스할 수 없다.

그러나 다음과 같이 하면 멤버가 공용이 되어 클래스 외부에서 접근 가능하다.

class myclass{

public: // 멤버를 공용으로 지정

int a;

int b;

};

public 키워드 뒤에 ':'이 있음을 유의하자. private도 역시 콜론으로 마친다.

예제

클래스 공용 멤버 엑세스

#include

#include

class Time{

public: // 멤버를 공용으로 사용 가능하게 함

int hours;

int minutes;

int seconds;

};

void main(){

Time clock;

clock.hours=10;

clock.minutes=30;

clock.seconds=25;

clrscr();

cout << clock.hours << ":" << clock.minutes << ":" << clock.seconds <

getch();

}


위의 예제에서 public:를 private으로 고치면 몇가지 에러 가 뜬다.

'Time::hours' is not accessible

'Time::minutes' is not accessible

'Time::seconds' is not accessible

여기서 영역지정자(::)가 나왔다. Time::hours 는 'Time의 멤버 변수 hours'라고 해석하면 된다. 즉 멤버 변수에 접근할 수 없다는 에러 메시지이다.

그렇다면 어떻게 전용변수에 접근할 수 있을까? 이 물음에 대한 해답은 다음 절에서 배울 맴버 함수에서 다룰 것이다.

아래의 예제는 어떻게 될까? 생각해보자.

예제

#include

#include

class Time{

int hours;

public:

int minutes;

int seconds;

};

void main(){

Time clock;

clock.hours=10;

clock.minutes=30;

clock.seconds=25;

clrscr();

cout << clock.hours << ":" << clock.minutes << ":" << clock.seconds <

getch();

}


변수가 스스로 동작하게 하는 멤버 함수

멤버 함수(member functions)를 통해서, 프로그램의 모든 전용 데이타를 엑세스할 수 있다.

변수를 출력하고자 할 때 여러분이 그 변수를 출력하지 않아도 그 변수는 스스로 출력할 것이다. 이런 마술같은 데이터 동작은 객체의 멤버 함수를 통해 모두 수행된다.

class Man {

private: // 멤버 변수는 private로 지정( 생략해도 되나 넣는 것이 좋음)

char *name;

int age;

int height;

public: // 공용 멤버 함수로 멤버 변수에 접근

void getname(char *s){

name=s;

}

}

getname()은 매개 변수 s를 받아 멤버 변수 name에 대입한다.

Man man1 ;

man1.getname("김철수");

멤버 변수 name이 private이므로 접근 불가하지만 멤버 함수 getname()을 이용하여 간접적으로 접근할 수 있게 된다.

예제

공용 멤버 함수

#include

#include

class Man{

private:

char *name;

int age;

int height;

public:

void getname(){

cout << "What's your name? ";

cin >> name;

}

void putname(){

cout << "your name is " << name << endl;

}

};

void main(){

Man man1;

man1.getname();

man1.putname();

getch();

}


위의 예제에서 getage(), getheight(), putage(), putheight()를 추가해 보자.

다음과 같이 클래스 데이터 멤버를 초기화할 수는 없다.

class Abc{

private:

char a='g'; // 클래스 변수가 아직 정의되지 않았기 때문에

int b=33; // 초기화할 수 없다.

float c=89.12;

public:

//생략

}

멤버 함수의 외부 정의

공용 멤버 함수 예제를 다음과 같이 할 수도 있다.

예제

class 간결화

#include

#include

class Man{

private:

char *name;

int age;

int height;

public:

void getname(); // 멤버 함수 프로토타입

void putname();

}; // 클래스 정의 끝

void Man::getname(){ // 멤버 함수 getname() 정의 부분

cout << "What's your name? ";

cin >> name;

}

void Man::putname(){ // 멤버 함수 putname() 정의 부분

cout << "your name is " << name << endl;

}

void main(){

Man man1;

man1.getname();

man1.putname();

getch();

}


클래스를 내부에 정의하면 클래스가 너무 길어진다. 따라서 클래스를 간결화 하기 위해 멤버 함수를 클래스 외부에 정의한다.

영역지정 연산자 (::)를 사용하여 클래스의 멤버 변수임을 밝힌다.

class에서 inline 함수 사용

클래스의 효율성을 개선할 수 있게 하는 또 한가지 사항이 있다. 클래스 멤버 함수에 inline을 추가하자. inline이 함수 호출을 함수 코드 자체로 확장하는 것이라고 앞에서 배웠다.

Turbo C++가 멤버 함수 코드를 성공적으로 인라인할 때 클래스 멤버 함수 실행이 보다 효율적이 된다.

아래의 예제는 위의 예제(class의 간결화)에서 inline 키워드를 추가했다.

x1행과 x2행을 유심히 보기 바란다.

예제

class의 인라인 사용

#include

#include

class Man{

private:

char *name;

int age;

int height;

public:

void getname(); // 멤버 함수 프로토타입

void putname();

}; // 클래스 정의 끝

inline void Man::getname(){ // x1행

cout << "What's your name? ";

cin >> name;

}

inline void Man::putname(){ // x2행

cout << "your name is " << name << endl;

}

void main(){

Man man1;

man1.getname();

man1.putname();

getch();

}


멤버 함수를 클래스 안에 직접 넣었다면 inlin을 명시할 필요는 없다. Turbo C++는 자동적으로 그 함수들을 인라인한다.

this 포인트 변수

this 포인프 변수란 오브젝트 자신의 시작 주소를 가리키는 포인트 변수이다.

위의 예제에서

inline void Man::getname(){

cout << "What's your name? ";

cin >> name;

}

는 아래의 구문과 동일하다.

inline void Man::getname( ){ // x1행

cout << "What's your name? ";

cin >> this->name;

}


?

  1. [api] 인스타그램에서 최신 이미지 가져오기 (Using Instagram API)

    Date2018.04.05 CategoryDevelop Byhooni Views12390
    Read More
  2. [c++] 자료구조(링크리스트,스택,큐)와 후위 표기 계산기 샘플 ㅋㅋ

    Date2013.04.23 CategoryDevelop Byhooni Views12325
    Read More
  3. [php] 하루 전 날짜 쉽게 구하기.

    Date2013.12.25 CategoryDevelop Byhooni Views12213
    Read More
  4. [c] 문자열 자르는 함수(strtok) 예제

    Date2013.04.23 CategoryDevelop Byhooni Views12177
    Read More
  5. SVN 명령어 (SVN command)

    Date2014.02.28 CategoryDevelop Byhooni Views12149
    Read More
  6. 참고하고 지울 자료.. 집에서 바야지.. ㅋㅋ

    Date2013.04.23 CategoryDevelop Byhooni Views12129
    Read More
  7. [ios] GCD 변수 사용 예제

    Date2013.10.01 CategoryDevelop Byhooni Views12117
    Read More
  8. [c++] 기초강좌 #03(함수의 매개변수 전달)

    Date2003.04.23 CategoryDevelop Byhooni Views12086
    Read More
  9. [c++] 현승이가 준 P2P 프로그램 소스 ㅋㅋ

    Date2013.04.23 CategoryDevelop Byhooni Views12072
    Read More
  10. [php] 한샘 전자발주 시스템..

    Date2013.04.23 CategoryDevelop Byhooni Views11987
    Read More
  11. [java] 날짜 계산 (Date, SimpleDateFormat)

    Date2013.04.23 CategoryDevelop Byhooni Views11854
    Read More
  12. [c++] 기초강좌 #04(클래스)

    Date2003.04.23 CategoryDevelop Byhooni Views11836
    Read More
Board Pagination Prev 1 ... 12 13 14 15 16 17 18 19 20 21 ... 71 Next
/ 71