뭐, 월드컵 하고 있는데 짜달시리 올릴게 없어서. 필기 했던거 올린다. 지울 겸.
짜증난다.
26살.
눈치보고.
집에서 TV도 못보고.
훗.
하긴 오래전에 좋아하던거 다 버렸지.
나 중학교 고등학교 때 같이 축구하던 애들...
정말 하루도 안 빠지고 했다고 해도 과언이 아니다.
하지만. 나는 축구를 못한다.
공이 싫다.
나는 쌓아왔던거, 뭐 지킨다는 거 다 싫다.
현재가 좋다.
추억은 슬픈 것이다. 기억하기도 싫고. 싫어한다.
슬퍼서 잊을려고 ?
슬픈 추억은 아름답다고?
그런 추억들이 나에게 큰 부분을 차지한다고?
셧더 뻑이다.
한잔해야지.
oop 란?
짜증난다.
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,'#');
}
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.