BLOG ARTICLE DEVELOP | 84 ARTICLE FOUND

  1. 2006.09.11 C#시작하기
  2. 2006.08.19 runlength
  3. 2006.08.18 06/08/18 수업내용
  4. 2006.08.17 06/08/17 수업내용
  5. 2006.08.17
  6. 2006.08.16 06/08/16 수업내용
  7. 2006.08.11 06/08/11 수업내용
  8. 2006.08.10 06/08/10 수업내용
  9. 2006.08.09 06/08/09 수업내용
  10. 2006.08.08 06/08/08 수업내용
  11. 2006.08.07 06/08/07 수업내용
  12. 2006.08.04 06/08/04 수업내용
  13. 2006.08.03 06/08/03 수업내용
  14. 2006.08.02 06/08/02 수업내용
  15. 2006.08.01 06/08/01 수업내용

C#시작하기

DEVELOP/C# 2006. 9. 11. 17:49
  • 기능1  // <-[namespace]
    ~~.CS
    ~~.CS
  • 기능2
    ~~.CS
    ~~.CS

using [namespace];  //기능을 불러옴
class hello
{
public static void Main()
{
Console.WriteLine("Hello, C# !");  //Console <-설계도명 // WriteLine <-메소드명
}
}


MSDN에서 설계도찾기

0
0



       Console.WriteLine("{0,-3}+{1,-3}={2,-3}", 99, 1, 100);  //기본
       Console.WriteLine("{0,-3}+{1,-3}={2,-3}", 100, 100, 200); //3자리정렬
       Console.WriteLine("{0,-3:f}+{1,-3:f}={2,-3:f}", 100, 100, 200); //3자리정렬//소수점2자리도 표현
AND

runlength

DEVELOP/C++ 2006. 8. 19. 10:49
atoi의 반대 심심해서 짜본.. runlength
AND

06/08/18 수업내용

DEVELOP/C++ 2006. 8. 18. 14:19

*레코드 단위로 출력하기

*파일모드 상수들
1. ios_base::in -> 파일을 읽기 위해 연다

2. ios_base::out -> 파일을 쓰기 위해 연다.

3. c++모드|ios_base::ate -> 파일을 지시된 모드로 연후 파일의 끝으로 간다.(at end)
예) ios_base::in|ios_base::ate

4. ios_base::app -> 파일의 끝에 덧붙인다.
예) ios_base::out|ios_base::trunc

5. ios_base::trunc -> 파일을 열때 이미 존재하면 데이터를 지운다.
예) ios_base::out|ios_base::trunc

6. c++모드|ios_base::bring -> 파일을 지시된 모드와 이진모드로 연다.
예) ios_base::in|ios_base::binary
ios_base::out|ios_base::binary

*입력작업 story
ifstream 객체 생성
특정 파일과 연계
cin과 비슷한 방법으로 객체를 사용한다.

ifstream fin;
fin.open("sample.txt");
char ch;
fin>>ch;//한문자
char buf[80];
fin.getline(buf,80);//한줄

AND

06/08/17 수업내용

DEVELOP/C++ 2006. 8. 17. 15:32

virtual 함수
오버라이딩으로 인하여 Base Class 의 포인터가 Derived Class로 만들어지는 개체를 인식못하는 문제점을 해결
virtual이라고 해서 모두 동적 바인딩은 아니다
->컴파일시에 호출의 여지가 분명한 것은 정적 바인딩
클래스를 정의할때 상속받을 클래스에서 오버라이딩 될것으로 판단되는 함수는 가상함수로 만든다.

클래스의 멤버함수만 가상함수가 될 수 있다.
즉. 외부함수는 가상함수가 될 수 없다.

다형성(polymorphism)
똑같은 호출이라도 상황에 따라 호출하는 객체에 따라 함수가 서로 다른 동작을 하는 능력
함수오버로드, 동적 바인딩을 하는 가상함수 등

텍스트 파일의 입출력

표준 입출력처럼 작업

출력작업 story
-ofstream 객체생성
-그 객체를 출력파일과 연계
-cout처럼 객체를 사용
-ofstream객체를 닫는다.

AND

DEVELOP/C++ 2006. 8. 17. 11:02



#include <iostream>
using namespace std;

class que
{
struct Node
{
int value;
struct Node * b_add;
struct Node * n_add;
};
public:
Node * nd_f;
Node * nd_r;

int items,mx_items;

que();
//  que(que & q);

void q_ipt();
void q_opt();
void ud_flow();
void ov_flow();
void q_view();
//  struct Node * mk_nd();
//  Node * mk_nd();
};

que::que()
{
items=0;
// Node * nd;
// nd=mk_nd();
Node * nd=new Node;
nd_f=nd_r=nd;
nd->b_add=NULL;
nd->n_add=NULL;
}
/*
struct Node * que::mk_nd()
{
Node * nd=new Node;
// struct Node * nd=new Node;
return nd;
}
*/
void que::q_ipt()
{
int temp;  //값 임시저장소
Node * temp_a; //주소임시저장소
// Node * nd;  //주소기본저장소
//오버플로어 처리
cin>>temp;
nd_r->value=temp;
temp_a=nd_r;

// nd_r++;//다른방법?
// nd=mk_nd();
Node * nd=new Node;
nd_r=nd;

nd_r->b_add=temp_a;
nd_r->n_add=NULL;
temp_a->n_add=nd_r;

cout<<temp_a<<"("<<temp<<")값이 들어왔습니다."<<endl;
cout<<nd_r->n_add<<endl;
}
void que::q_opt()
{
int temp;  //값 임시저장소
Node * temp_a; //주소임시저장소
if (nd_r==nd_f) ud_flow();
else
{
temp=nd_f->value;
temp_a=nd_f;
nd_f=nd_f->n_add;

nd_f->b_add=NULL;
temp_a->n_add=NULL;

cout<<"나온 값은 "<<temp<<"입니다."<<endl;
}
// if (nd_r==nd_f) cout<<"큐가 비었습니다."<<endl;
}
void que::ud_flow()
{
cout<<"큐가 비었습니다."<<endl;
}
void que::ov_flow()
{
cout<<"큐가 가득 찼습니다."<<endl;
}
void que::q_view()
{
cout<<"큐의 값을 출력합니다."<<endl;
// cout <<nd_r<<nd_f<<nd_r-nd_f<<endl;
Node * temp_a; //주소임시저장소
temp_a=nd_f;
while(temp_a->n_add)
{
cout<<temp_a->value<<endl;
temp_a=temp_a->n_add;
}
//view();
}

int main()
{
que c_q;

int work, bk_k;
while(1)
{
cin>>work;
switch(work)
{
case 1:
  c_q.q_ipt();
  break;
case 2:
  c_q.q_opt();
  break;
case 3:
  c_q.q_view();
  break;
default:
  bk_k=-1;
}
if (bk_k==-1) break;
}
return 0;
}

AND

06/08/16 수업내용

DEVELOP/C++ 2006. 8. 16. 14:26
상속
객체를 포함
다른 객체를 포인터로??


Base클래스의 포인터는 그 하위 클래스를 저장할 수 있다.(위 그림 참조)
그러나 접근권한은 없다.//**
int main()
{
  A *pr1=new A;
  B *pr2=new B;
  C *pr3=new C;
}

  A *pr1=new A;
  A *pr2=new B;
  A *pr3=new C;

  C *pr1=new A;//X
  C *pr2=new B;//X
  C *pr3=new C;//O


상속시 동일 인자가 있으면 가려짐..



객체 레퍼런스 객체를 참조할 수 있는 레퍼런스
객체포인터와 유사한개념
A클래스의 레퍼런스 A&는 A객체뿐만 아니라
A클래스를 상속하는 Derived클래스의 객체도 참조 가능하다.

교수
이름
나이
연봉

시간강사
이름
나이
강의료
시간

직원
이름
나이
호봉

공통(인적사항)
이름
나이

일반적 - 구체적//O//is-A관계
일반적 -> 구체적//X

has-A관계//다른 객체를포함하는 관계
AND

06/08/11 수업내용

DEVELOP/C++ 2006. 8. 11. 14:22

상속
부모/자식
기반/파생
base/derived
등등으로 불림

부모의 private변수에는 자식의 함수라도 접근못함

AND

06/08/10 수업내용

DEVELOP/C++ 2006. 8. 10. 15:28

using namespace std;
//friend로 선언하면 error

using std::cout;
using std::endl;
//friend로 선언해도 괜찮음

AND

이항 연산자 오버로딩
멤버함수의 오버로딩
전역함수의 오버로딩

p+10
p.operator+(int);//멤버함수..
operator+(p,10);//전역함수..

class point의 객체라고 가정



using namespace
using std::endl;//endl만 가져옴
using std::cout;//cout만 가져옴
//cin사용시 에러

AND

*static 멤버데이터

class의 선언만으로도 이미 기억공간이 할당
static멤버데이터는 선언부와 정의부를 모두 지정해야한다.
예)
class ABC
{
...
  static int a;//선언
...
}
int ABC::a=10;//정의

클래스당 1개 만 존재하며, 해당 class의 여러객체에서 공동으로 사용

this 포인터 쓸수 없다.!!

public으로 선언하면 클래스 외부에서 접근가능


static 멤버함수
객체를 통해서 호출될 수도 있지만 객체 생성 없이도 범위연산자(::)를 이용해 접근가능
static함수에서 일반함수 호출불가
static 멤버함수는 static멤버데이터만 접근가능. 주로, static멤버데이터의 값을 변경시키는데 사용

AND

객체 배열
person p[5];
person *p = new person;
person *p = new person[5];




const 멤버함수
예약어 const를 함수 선언 및 정의시 뒷부분에 붙여준다.
void sum() const
{

}

const 멤버함수는 그 함수 내에서 접근하는 멤버 데이터의 값을 읽을 수만 있고 변경 불가능

const 멤버함수는 일반멤버함수 호출불가//수정을 막기 위해!!!

생성자와 소멸자는 const가 될 수 없다.


일반객체
1/일반 멤버변수
2/const 멤버변수

const 멤버객체
x/일반 멤버변수//부를수없다.
1/const 멤버변수
AND

p59
this pointer

클래스의 맴버함수를 호출할때 그 멤버함수를 호출한 객체를 가릐는 특수한 포인터가 있는데 그것이 바로 this포인터이다.
this포인터는 멤버함수 호출시 자동으로 생성되고, 멘버함수 종료시 자동소멸
this포인터의 생성과 소멸은 자동으로 이루어지기 때문에 프로그래머가 제어해주어야 할 부분은 없다.
명시적으로 사용할 경우 friends함수와 static함수에서는 사용불가.


p62
생성자 소멸자

객체를 초기화, 객체 생성 완료


복사생성자
클래스 자신을 참조객체로 전달받는 함수를 복사 생성자라 한다.
default copy constructor: 사용자가 지정하는 않을경우 컴파일러가 자동으로 생성해주는 복사생성자(얕은 복사생성자)
->생성자와는 상관없이 클래스내에 명시적으로 프로그래머가 만들어놓지 않으면 컴파일러가 자동생성
복사생성자가 없는 클래스는 있을 수 없다.
사용자가 직접 정의한 복사 생성자는 "deep copy constructor"라고 한다.
AND

#define ZERO 0

#define SQ(x) ((x)*(x))

//구현이 어렵다.
//에러가 나도 디버깅이 어렵다
//전처리기가 처리한다

inline int SQ(int x)
{
return x*x;
}

//쉽게 구현
//디버깅쉽고
//컴파일러가 처리


C++에서의 STRUCT

struct를 안써도 됨
함수가 들어갈 수도 있음

CLASS
struct+상속

클래스의 변수를 사용하게 되면 객체가 된다.

private로 선언된 클래스 내부변수는 main함수에서 조차 접근할 수 없다.
protected으로 ... 비슷
상속시에 효과발휘?
AND

레퍼런스타입의 함수
sum(n);
int & sum(int x)
{

}
임시기억공간을 생성안함
작업한 값의 메모리 자체가 돌아감?

돌려줄값은 지역변수여서는 안된다!!
전역으로
혹은 static지역변수로..
ex) int & sum(static int x){}

받은것을 되돌려줌
sum(n);
int & sum(int &x){}

OVERLOAD
동일이름의 함수의 매개변수의 개수에 혹은 타입에 따라 각각 호출됨
함수명을 공유

strncpy(a,b,4); //4개만 복사하렴


void prn(int a=1)  ==  void prn(int =1)
동일
defalut parameter
prn();일경우 기본값 1을 넣은것처럼 처리


2개이상인경우 뒤쪽부터 채워야한다.
void prn(char ,int =1)  O 가능
void prn(char = '^' ,int =1)  O 가능
void prn(char = '^' ,int )  X 에러

void prn(char = '^' ,int =1)

prn()=prn('^',1)
prn('*',2)=prn('*',2)
prn('*')=prn('*',1)

AND

..

bool 참과 거짓?

reference
좀더 편한 포인터?

&의 용도
선언문에서는 참조변수
int a=3;
int &b=a;

실행문에서는 주소
int a;
int *p=&a;

특징
선언과 동시에 초기화
나중에 초기화 할 수 없다.
참조변수는 한번 초기화 되면 변경할 수 없다.
배열은 참조 불가.
!!
int a[3]={0,1,2}; //가능
int &ar[3]=a;      //불가//[3]가 에러//&가 붙은곳에 쓰면 안된대
AND