2012년 4월 4일 수요일

ㅋㅋ 내 일기중에서

뭐, 월드컵 하고 있는데 짜달시리 올릴게 없어서. 필기 했던거 올린다. 지울 겸.



짜증난다.

26살.

눈치보고.

집에서 TV도 못보고.

훗.

하긴 오래전에 좋아하던거 다 버렸지.

나 중학교 고등학교 때 같이 축구하던 애들...

정말 하루도 안 빠지고 했다고 해도 과언이 아니다.

하지만. 나는 축구를 못한다.

공이 싫다.



나는 쌓아왔던거, 뭐 지킨다는 거 다 싫다.

현재가 좋다.



추억은 슬픈 것이다. 기억하기도 싫고. 싫어한다.

슬퍼서 잊을려고 ?

슬픈 추억은 아름답다고?

그런 추억들이 나에게 큰 부분을 차지한다고?



셧더 뻑이다.



한잔해야지.



oop 란?
1. Object oriented Programming 의 약로
Object 중심의 프로그램 개발 방식이다.
기존의 절차적 언어 방식에서는 data와 그것의 처리 절차인 함수를
별도로 관리하여 많은 문제점을 발생시킨다.
oop는 data와 함수를 하나로 묶어 object라 부르고
프로그램을 그 object 중심으로 작성해 나가는 것이다.


2. oop의 4대 특징
1) 추상화 (Abstraction)
(1) 복잡한 것을 간단하게 하는것.
(2) 세부적인사항은 무시하고 본질적인 특징에만 집중하는것.
data추상화 : int Struct data (년, 월, 일 구조를 가짐.)
절차적 추상화 : clrdcr() : "화면을 지운다" 라는 본질적 특징만 알면된다.
2) 은닉화 (Encapsulation)
(1) 관련있는 정보와 그것의 처리방법을 하나로 묶은것.
(2) 외부로부터 감추어 두는것 : Data 보호.
추상화 + 은닉화 ==> 추상적 데이타형 (Abstruct Data Type) : ADT ==> 클래스
3) 상속성(Inheritance)
다른 클래스가 갖는 특징들을 물려받아 사용하는것.
4) 다향성 (Polymorphism)
같은 message에 대해 object가 다른 반응을 보이는것.


☆클래스☆ : 기억공간들과 함수들을 함께 모아놓고 관리하기 위한 자료형
(1) 접근지정자를 두어 변수나 함수들을 임의로 사용하지 못하게 설정할 수 있는 기능을 가짐.
(2) 이미 작성해둔 Class 자료형을 물려받아 사용.
(3) 같은 이름의 함수를 선조와 후손이 동시에 존재시킴으로써 상태에 따라 통일이름을 가지고 다른 처리.


클래스 사용목적: 기억장소와 함수를 한덩어리로 관리해서 자료처리를 더욱 효과적으로 하기 위함


☆형식1☆
Class 클래스 이름
{
자료형 변수1;
자료형 변수2;
.
.
.
자료형 변수N;
접근지정자
클래스 이름(){내용}
~클래스 이름(){내용}
결과형 함수명1(){내용}
결과형 함수명2(){내용}
.
.
.
};





☆형식2☆
class 클래스 이름
{
자료형 변수1;
자료형 변수2;
.
.
.
자료형 변수N;
접근지정자
클래스 이름(){내용}
~클래스 이름(){내용}
결과형 함수명1(){내용}
결과형 함수명2(){내용}
.
.
.
};


클래스 이름 ::클래스 이름(){내용}
클래스 이름 ::클래스 이름(){내용}
결과형 클래스 이름::함수명1(){내용}
결과형 클래스 이름::함수명2(){내용}
.
.
.
결과형 클래스 이름::함수명n(){내용}


☆예제☆
class Score
{
char name[20];
int kor,eng;
double avg;
};
void main()
{
Score a;
strcpy(a.name,"홍길동");
cout<<"name is"<
}





☆접근 지정자(Access Specifier)☆
클래스 자료형 내부에 선언된 맴버들을 어떤 곳에서는 사용 할수 있게 하고
어떤 곳에서는 사용하지 못하게 하는 예약어.


☆접근지정자의 종류☆
1)public :맴버 변수나 맴버 함수가 public으로 선언 되어져 있을 경우에는 클래스내에서
뿐만아니라 어떤 함수에서도 사용할 수 있다.(접근가능)
2) private : 멤버변수나 멤버함수가 private로 선언되어져 있으면 해당 멤버들은
자신의 클래스내의 멤버변수나 멤버함수 속에서만 사용할수 있다
(단, friend로 지정된 함수와 friend로 지정된 클래스에서는 private 라고 지정된 멤버에도 접근할수 있다.)
3) protected : 멤버들은 자신의 클래스내의 멤버함수 속과 후손 클래스내의 멤버함수
속에서 사용이 가능


마지막에 " getch() " 라고 써주면 엔터는 치기 전까지 종료되지 않는다.


*const 멤버함수
- 멤버함수의 머릿부 뒤에 const라는 예약어가 기재된 멤버함수를const멤버함수가 한다.
const멤버함수로 선언하게 되면 그 멤버함수속에서는 멤버변수의 값을 이용만 할수 있고
변경은 불가능 하다. const형 멤버함수 속에서는 일반 멤버함수(const로 지정되지 않은 멤버함수)
를 호출하지 않는 것을 원칙으로 한다. (이유: 일반 멤버함수 쪽으로 가서 멤버변수의 값을 임의로
바꾸는 경우가 발생할 수도 있기 때문이다.)
①const 멤버함수 기재형식
⑴class클래스 이름
        {
                접근지정자:
                        자료형 멤버변수;
                접근지정자:
                        결과형 멤버변수1() const
                        {
                                내용1
                        }
        };    <-- 클래스 끝
②class 클래스 이름
{
        접근지정자:
                자료형 멤버변수;
        접근지정자:
                결과형 멤버함수1() const
}; <--클래스 끝



결과형 클래스이름::멤버함수1() const
{
        내용1  <-- 멤버변수값을 이용할 수는 있고 변경시킬수는 없다.
}


생성자(constructor)함수 - 362p
①생성자 함수라는 것은 오브젝트가 생성되어질때 자동적으로 호출되어지는 함수. 즉, 오브젝트가 메모리상에 기억공간을 확보할 때 저절로 호출되어지는 함수. 생성자 함수가 제공되어지는 가장 큰 목적은 오브젝트가 생성될때 각 멤버 변수에 확실한 초기값을 부여하기 위함.(즉, 멤버변수에 gabage값 기억되는것. 방지)
②생성자 함수는 오브젝트가 만들어질때 자동으로 호출되는 멤버함수이다.
③사용자가 강제로 호출할수 없다.
④결과형을 기재하지 않는다.(결과값을 리턴 시키지 못한다.)
⑤생성자 함수 이름은 클래스 이름과 동일하게 기재한다.
⑥생성자 함수는 매개변수를 가질수 있으며 오버로드 함수화 시킬 수 있고 매개변수에 초기값을 부여할 수도 있다.
⑦매개변수도 없고 함수의 내용도 없는 것을 디폴트 생성자 함수라하며 사용자가 생성자함수를 만들지 않았을 때는 디폴트 생성자가 있는 것으로 취급. 단,사용자가 생성자 함수를 하나라도 만들게 되면 디폴트 함수는 없는것으로 취급.
⑧생성자함수의 접근 지정자는 반드시 public으로한다.
⑨생성자함수뒤에 :(콜론)연산자를 기재하여 멤버변수에 간단하게 초기값을 부여하거나 상속되었을 경우에는 선조 클래스의 생성자에 초기값을 넘겨주는 형식을 기재할수 있다.
⑩생성자 함수는 절대로 const하수화 시킬수 없다.
⑪생성자 함수의 호출시기는 기억류에 따라 차이가 있다.
⑫생성자 함수의 매개변수로 자신의 클래스 자료형으로 이루어진 포인터나 레퍼런스 오브젝트를 한개만 기재했을때 이를 복사, 생성자 함수라 한다.
⑬복사 생성자 함수를 만들지 않으면 디폴트 복사 생성자함수가 존재하는것으로 처리
⑭복사 생성자 함수는 오브젝트 생성시에 자신의 클래스형으로 이루어진 오브젝트를 인수로서 매개변수에 넘길 경우나 멤버함수를 호출한후에 복귀할 때 자신의 클래스 형으로 된 오브젝트 자료형을 리턴 받을 때 호출되어진다.


생성자의 모양


#include


class Test
{
        int su;
public:
        Test();
        Test(int);
        Test(int,int);
        Test(Test&);
};


Test::Test(){su=0;}
Test::Test(int a){su=a;}
Test::Test(int a, int b){su=a+b;}
Test::Test(Test &M){su=M.su;}


void main(){}
*/



/*
#include
#include
#include   //turbo c에서만 사용


class Na
{
        int kor;
        int eng;
public:
        Na(){}


        void Disp()
        {
                cout<<"국어="<
                cout<<"영어="<
        }
};


void main()
{
        Na kim;
        kim.Disp();
        kim.Na();         //?생성자 함수가 오류나는 부분(선언된kim으로부터의 클래스 벗어나면 실행된다.?)
}


2. 소멸자(Destruction)함수


오브젝트가 메모리에서 없어질 때 자동적으로 호출.


① 소멸자 함수의 함수 이름은 클래스 이름과 동일한 이름으로 기재하며
 소멸자 함수는 함수명 앞에 ~(틸드) 기호를 기재하여 선언.
② 접근지정자는 public
③ 결과형 기재 안한다.
④ const 함수화 시킬수 없다.
⑤ 하나의 클래스에서 한개밖에 기재할 수 없으며 소멸자 함수는 매개변수를 가질수 없다.
⑥ 사용자가 강제로 호출할 수 없다.
⑦ 소멸자 함수의 호출시기는 생성자 함수의 호출 시기의 역순이다.
⑧ 동적으로 할당된 메모리들을 오브젝트 소멸과 함께 자유공간으로 돌려줄 때 사용.



*포함오브젝트(Embeded Object)

- for문속에 for문이 있는 경우를 다중 for문이라고 하고
 구조체속에 구조체가 있는 경우를 다중 구조체라 하듯이
 오브젝트 속에 또 다른 오브젝트가 존재하는 경우를 다중 오브젝트라 한다.
 삽입오브젝트. 포함 오브젝트라 부름.
- 만드는 법: 어떤 클래스내의 멤버변수의 자료형을 클래스 자료형으로 만듬.
- 포함 오브젝트가 존재할 경우에는 포람 오브젝트의 생성자가 먼저 수행
- 포함 오브젝트의 생성자함수의 매개변수에 초기값을 넘겨주고자 할 때는
 포함오브젝트를 포함하고 있는 클래스내의 생성자 함수 머릿부 뒤에서
 : 포함오브젝트이름(값1, 값2...)와 같은 형태로
- 반복적으로 등장하는 멤버변수의 집단들이 존재할 경우 포함 오브젝트를 주로 이동함





















- 형식 -
class 클래스이름1
{
        자료형 변수1;
        자료형 변수2;
        .
        .
        접근지정자:
        결과형 함수명1(){내용;}
};


class 클래스이름2
{
        .
        .
        자료형 변수 x;
        클래스 이름1 변수 y;
        
        접근지정자:
        결과형 함수명2(){내용;}
};
§복사 생성자 함수의 자동호출시기


class 클래스이름
{
        자료형 변수;
public:
        클래스이름(클래스이름 &매개변수1){내용}
        결과형 함수명1(클래스이름 매개변수2){내용}
        클래스이름 함수명2()
        {
                return(오브젝트);
        }
        결과형 함수명3()
        {
                클래스이름 오브젝트1;
                클래스이름 오브젝트2(오브젝트1);
                클래스이름 오브젝트3=오브젝트2;
        }
};


void main()
{
        클래스이름 오브젝트4;
        클래스이름 오브젝트5(오브젝트4);
        클래스이름 오브젝트6=오브젝트5;
}






#include
#include
class SUNGJUK
{
char irum[11];
int nai;
public:
void Set(char*s);
void Set(int n);
void Set(char*s1, int n1);
void Disp(int)const;
};
inline void SUNGJUK::Set(char*s)
{
strcpy(irum,s);
}
inline void SUNGJUK::Set(int n)
{
nai=n;
}
inline void SUNGJUK::Set(char*s1,int n1)
{
Set(s1);
Set(n1);
}
inline void SUNGJUK::Disp(int N=0)const
{
if(N==0)cout<<"이름 = "<
<<"나이 = "<
if(N==1)cout<<"이름 = "<
if(N==2)cout<<"나이 = "<
}
void main()
{
class SUNGJUK kim;
kim.Set("최형구",21);
kim.Disp();
kim.Disp(1);
kim.Disp(2);
}


결과 :  이름 : 최형구 나이:21
        이름 : 최형구
        나이 : 21











#include
#include
class SUNGJUK
{
        int kor;
        int eng;
public:
        void SetK(int k, int e)
        {
                kor = k;
                eng = e;
        }
        void SetE(int k1, int e1)
        {
                SetK(k1,e1);
                
        }
        void Disp()
        {
                cout<<"※국어점수 = "<
                cout<<"※영어점수 = "<
        }
};
void main()
{
        class SUNGJUK kim;
        kim.SetE(80,85);
        kim.Disp();
        getch();
}



결과 : ※국어점수 = 80
       ※영어점수 = 90


























#include
#include
#include
class SUNGJUK
{
        char irum[11];
        int nai;
public:
        void Set(char*s);
        void Set(int n);
        void Set(char*s1, int n1);
        void Disp();
        void Erasespace();
};
inline void SUNGJUK::Set(char*s)
{
        strcpy(irum,s);
}
inline void SUNGJUK::Set(int n)
{
        nai = n;
}
inline void SUNGJUK::Set(char*s1, int n1)
{
        Set(s1);Set(n1);
}
inline void SUNGJUK::Disp()
{
        cout<<"이름 = "<
        cout<<"나이 = "<
}
inline void SUNGJUK::Erasespace()
{
        char imsi[11];
        int a = 0, b = 0;
        while(irum[a] != NULL)
        {
                if irum[a] != 32
                {
                        imsi[b] = irum[a]; b++ ;
                }
                a++;
        }
        imsi[b]=NULL;
        strcpy(irum,imsi);
}
void main()
{
        class SUNGJUK kim;
        kim.Set("최형구",21);
        kim.Disp();
        kim.Erasespace();
        kim.Disp();
}








#include
using namespace std;
int main()
{
        int pennies = 8;
        int dime = 4;
        int quarters = 3;
        double total = pennies *0.01 + dime * 0.10 + quarters*0.25;
        cout<<"total(합계) value = "<
        return 0;
}


결과 :  total(합계) value = 1.23



#include
#include
#include
#include


class Na
{
        int kor;
        int eng;


public:
        Na(){kor=eng=0;}
        Na(int k){kor=k; eng=0;}
        Na(int k, int e){kor=k; eng=e;}


        void Disp()
        {
                cout<<"국어="<
                cout<<"영어="<
        }
};



void main()
{
        Na kim;
        Na Lee(50);
        Na Park(80,90);
        kim.Disp();
        Lee.Disp();
        Park.Disp();
}






#include
#define P(x) cout<<"here is "<
class na{
        int kor; int eng;
public:
        na(int k=0,int e=0){kor=k;eng=e;}
        na(na&);
        void Disp()
        {
                cout<<"국어 = "<
        }
        na Get(na k)
        {
                na im;
                P(4);
                na im1(im);
                P(5);
                na im2=im;
                P(6);
                return(im);
        }
};
na :: na(na &B)
{
        static int a=0;
        cout<<"Called Copy Constructor.Now is = "<<++a<<"\n";
}
void main()
{
        na M1(70,80);
        na M2,M3;
        P(1);
        na M4(M1);
        P(2);
        na M5=M4;
        M2=M5;
        P(3);
        M3=M1.Get(M2);
        P(7);
}



결과 : here is 1
      Called Copy Constructor.Now is =1
here is 2
      Called Copy Constructor.Now is =2
here is 3
      Called Copy Constructor.Now is =3
here is 4
      Called Copy Constructor.Now is =4
here is 5
      Called Copy Constructor.Now is =5
here is 6
      Called Copy Constructor.Now is =6
here is 7



#include
#include
#include
#include


class NA
{
        int kor;
        int eng;


public:
        NA(int k=0, int e=0){kor=k; eng=e;}
        NA(NA &B){kor=B.kor; eng=B.eng;}


        void Disp()
        {
                cout<<"국어="<
        }


        NA get()
        {
                NA im;
                im.kor=kor;
                im.eng=eng;
                return(im);
        }
};


void main()
{
        NA kim(50);
        NA lee(80,90);
        NA park(lee);
        kim.Disp();
        lee.Disp();
        park.Disp();
        kim=lee.get();
}




















#include
#define P(x) cout<<"here is "<


class NA
{
        int kor;
        int eng;
public:
        NA(int k=0, int e=0)
        {
                kor=k; eng=e;
        }
        NA(NA&);


        void disp()
        {
                cout<<"국어="<
        }


        NA get(NA k)
        {
                NA im;
                P(4);
                NA im1(im);
                P(5);
                NA im2=im;
                P(6);
                return(im);
        }
};


NA::NA(NA &B)
{
        static int a=0;
        cout<<"Called copy constructor Now is="<<++a<<"\n";
}


void main()
{
        NA M1(70,80);
        NA M2,M3;
        P(1);
        NA M4(M1);
        P(2);
        NA M5=M4;
        M2=M5;
        P(3);
        M3=M1.get(M2);
        P(7);
}


#include
class DA
{
        int kor;
        int eng;
public:
        DA()
        {
                cout<<"오브젝트가 생성됨\n";
                kor=eng=0;
        }
        ~DA()
        {
                cout<<"오브젝트가 소멸됨\n";
        }
        void disp()
        {
                cout<<"국어="<
        }
};
void KK()
{
        DA kim;
}
void main()
{
        
        KK();
    DA kim;
        kim.disp();
}






















































#include



class na
{
        double h;
        double w;
        double ws;


public:
        void g(float h, float w)
        {
                ws=(h-100)*0.9;
                
                if(w < ws-5)
                cout<<"당신은 허약입니다.\n";
       
                else if(w > ws+5)
                cout<<"당신은 비만입니다.\n";
       
                else
                cout<<"당신은 정상입니다.\n";
        }
};


void main()
{
        na qwe;
        qwe.g(170,50);
}





















*박스 만들기
#include
#include
#include
#include
class Box
{
        int x1,y1,x2,y2;
        char ch;
public:
        Box(int a=1, int b=1, int c=79, int d=24, char e='*')
        {
                x1=a;
                y1=b;
                x2=c;
                y2=d;
                ch=e;
        }
        Box(char c)
        {
                ch=c='*';
                x1=1;
                y1=1;
                x2=79;
                y2=24;
        }
        ~Box(){}
        void Draw() const;
        void Set(int, int, int, int, char);
        void Clear();
};
void Box::Draw() const
{
        for(int x=x1; x<=x2; x++)
        {
                gotoxy(x,y1);
                cout<
                gotoxy(x,y2);
                cout<
        }
        for(int y=y1; y<=y2; y++)
        {
                gotoxy(x1,y);
                cout<
                gotoxy(x2,y);
                cout<
        }
}
void Box::Set(int a,int b,int c, int d, char e)
{
        Clear();
                x1=a,y1=b,x2=c,y2=d,ch=e;
                Draw();
}
void Box::Clear()
{}
void main()
{
        Box Go;
        Go.Draw();
        Go.Set(3,3,70,20,'#');
        
}

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...