BLOG ARTICLE DEVELOP/C++ | 16 ARTICLE FOUND

  1. 2006.09.20 SWIG란?
  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 수업내용

SWIG란?

DEVELOP/C++ 2006. 9. 20. 14:12

SWIG 란 C/C++ 의 코드를 다른언어에서 사용가능하도록 만들어주는 프로그램이다.

SWIG란 프로그램을 사용함으로써 기존 C/C++ 코드를 새로운 언어로 포팅할 필요가

없으며 속도에 민감한 프로그래밍을 할때 유용하다. 그리고 마지막으로 Perl 같은

스크립트 언어 작성시 코드를 감추면서 프로그래밍을 할수 있다는 장점이 있다.

지원운영체제및 언어는 아래와 같다.


Tcl 8.0 and newer versions.

Python 1.5 and newer.

Perl 5.003 or newer.

Guile 1.3.4 and newer.

Java JDK 1.1 and newer.

Ruby.

Mzscheme.

PHP

Objective Caml (Ocaml)

Support for C# and the Chicken scheme


Unix

Microsoft Windows

Macintosh


최종 현재 1.3.29 까지 나왔다.


* SWIG 홈페이지 Http://www.swig.org

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