블로그 이미지
.
속눈썹맨

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

C++, Java 생성자에서 다른 생성자 부르기

2005. 5. 17. 20:42 | Posted by 속눈썹맨
C++에서는 생성자가 다른 생성자를 부르면
Temporary Object가 생겼다가 다시 소멸해 버린다.
따라서
obj = new Object명(인수); 라는 구문을 주었을 때.

heap에 object가 하나 만들어지고 그것의 생성자가
또 object를 만들어서 stack에 저장된다.
obj에는 stack의 pointer가 들어가서 stack에서 return된 후 object 사라지므로 invalid한 pointer가 되버린다.

따라서 그런 짓은 하지 않는 것이 좋다.
------------------------------------------------------
$ cat ./cpp_test3.cpp
#include <iostream>

using namespace std;

class B
{
    public:
    int m_i;
    char m_c;

    B(int i) : m_i(i)
    {
        cout << "B::B(int " << i <<  "), this:" << this << endl;
        B('z');
    }

    B(char c) : m_c(c)
    {
        cout << "B::B(char " << c << "), this:" << this << endl;
    }

    ~B()
    {
        cout << "B::~B(), this:" << this << ", m_i:" << m_i << ", m_c:" << m_c << endl;
    }
};

int main()
{
    B* p;
    p = new B(1);
    cout << "p:" << p << endl;
    cout << "p->m_i:" << p->m_i << endl;
    cout << "p->m_c:" << p->m_c << endl;
    delete p;

    return 0;
}
[ilashman@ob cpp_test]$ ./cpp_test3
B::B(int 1), this:0x8049f88
B::B(char z), this:0xbfffd550
B::~B(), this:0xbfffd550, m_i:-1073752680, m_c:z
p:0x8049f88
p->m_i:1
p->m_c:
B::~B(), this:0x8049f88, m_i:1, m_c:

----------------------------------------------------------
Java에서는 생성자가 다른 생성자를 불러도 된다.
다만 생성자가 다른 생성자를 부를 때는 첫번째 줄에서 불러야 한다.
(그렇지 않으면 compile시에 에러가 난다.)
생성자를 부를 때도 class명()라고 부르지 않고 this()라고 불러야 한다.
그리고 소멸자와 포인터가 없다.

$ cat C.java
class B {
    public int m_i;
    public char m_c;

    public void hi()
    {
        System.out.println("hi");
    }

    public B(char c)
    {
        m_c = c;
        System.out.println("B::B(char " + c + "), this:" + this);
    }

    public B(int i)
    {
        this('z');
        m_i = i;
        System.out.println("B::B(int " + i +  "), this:" + this);
        hi();
    }

    /*
    public ~B()
    {
        System.out.println("B::~B(), this:" + this + ", m_i:" + m_i + ", m_c:" + m_c);
    }
    */
}

class C {
    public static void main(String[] args) {
        B p = new B(1);
        System.out.println("&p:" + p);
        System.out.println("p.m_i:" + p.m_i);
        System.out.println("p.m_c:" + p.m_c);
    }
}

$ ~/local/j2sdk1.4.2_08/bin/java C
B::B(char z), this:B@14f8dab
B::B(int 1), this:B@14f8dab
hi
&p:B@14f8dab
p.m_i:1
p.m_c:z
http://en.wikipedia.org/wiki/Parkinson%27s_Law
http://100.naver.com/100.php?id=180314

. 근무시간이 늘어도 하는 일의 양은 같다.
. 부하의 수가 늘어야 승진한다.
. 일이 적어도 부하는 무조건 많이 필요하다.
. 부하는 늘어야 하지만 경쟁자는 필요없다.
. 예산 심의 시간은 예산액에 반비례한다.
. 위원회의 크기가 커지면 비효율적이다.
. 무능하면 정부, 공기업, 유능하면 사기업에 들어야 한다.
. 공무원은 서로를 위해 서로의 일을 만든다.

Peter principle
http://en.wikipedia.org/wiki/Peter_principle

Dilbert principle
http://en.wikipedia.org/wiki/The_Dilbert_Principle

Rich Internet Application

2005. 5. 17. 14:03 | Posted by 속눈썹맨
http://en.wikipedia.org/wiki/Rich_Internet_Application
. Web Browser와 Desktop application의 연결고리가 되는 것들
. 별도의 설치 과정이 필요없다. 동의만 하면 알아서 깔린다.

예) Javascript, Macromedia flash, Java applet, XUL, Active X, AJAX
C, C++ 책 독서 순서
. The C Programming Language
. Programming Pearl
. Writing Solid Code
. The Practice of Programming
. Code Complete
. The C++ Programming Language
. Essential C++
. The C++ Standard Library - A tutorial and Reference
. Accelerated C++
. Efficient C++
. Effective C++
. More Effective C++
. Effective STL
. Exceptional C++
. More Exceptional C++
. C++ Gotchas
. More Exceptional C++ Style
. Applied C++
. Design Pattern

Unix Network Programming 독서 순서
. Advance Programming In the Unix Environment
. The art of UNIX Programming
. TCP/IP Illustrated
. Unix Network Programming
. ACE 프로그래머 가이드
. C++ Network Programming 1,2

어휘)
Client : Object를 만들고, method를 call하는 프로그램 코드 흐름
Ownership : 자원(메모리 등..)을 관리하고 할당, 반환할 책임을 지닌 변수 or Object. 포인터라면 메모리를 가리키고 있다가 쓸모없어지면 release해야 할 책임. (누군가는 끝까지 가리키고 있다가 delete해줘야. dangly modifier"

----------------------------------------------------------------------------
Essential C++
http://print.google.com/print?id=PQBDY5PHRxMC&pg=1&lpg=1&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3DC%252B%252B&sig=-xe1_BWPlaXbjZKk1pd7qT_dl30

Modern C++ Design
http://print.google.com/print?id=aJ1av7UFBPwC&pg=xi&lpg=xi&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=owZAyNGC4t9n4oI_60i8RpCKPhM

C++ Gotchas
http://print.google.com/print?id=f22C26H2n1gC&pg=ii&lpg=ii&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=e53i_uZkO5VZ-K6j4uIFfsKiTjQ

Efficient C++
http://print.google.com/print?id=9wm-ezG7gWsC&pg=135&lpg=135&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=U3WoVHU-Fz8ZuJVV5jKgB5OuMEI

Applied C++
http://print.google.com/print?id=xzbRQXXsy6UC&pg=1&lpg=1&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3DC%252B%252B%26sa%3DN%26start%3D20&sig=CCamxzXruulWhND9OBSptaVSHaE

Exceptional C++
http://print.google.com/print?id=44oDV127XuwC&pg=25&lpg=25&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=fspfAt-ndrn-1rIhepm1tbcO6Cw

More Exceptional C++
http://print.google.com/print?id=ktm_Szh2eUwC&pg=126&lpg=126&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B%26ie%3DUTF-8%26lr%3D%26sa%3DN%26start%3D30&sig=n32r3KDcPm1pNfLYV4sL5qOp19Q

C++ Gems
http://print.google.com/print?id=dXRlZICKCloC&pg=141&lpg=141&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=rDcXSHo968q5WW8WYfdXoyXj0so

More C++ Gems
http://print.google.com/print?id=u9G7Qpz4B3cC&pg=36&lpg=36&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B&sig=cw5-x647-sRhDb_3cYzPt65as_E

The C++ Standard Library
http://print.google.com/print?id=n9VEG2Gp5pkC&pg=38&lpg=38&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B%26ie%3DUTF-8%26lr%3D%26sa%3DN%26start%3D10&sig=LRjBDEGQ92lD3nfCOvJc3AdThao

Unix Network Programming
http://print.google.com/print?id=ptSC4LpwGA0C&pg=ii&lpg=ii&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B%26ie%3DUTF-8%26lr%3D%26sa%3DN%26start%3D10&sig=11b486gpMwSafnIy_AbUhVFgXh8

C++ Templates: The Complete Guide
http://print.google.com/print?id=EotSAwuBkJoC&pg=73&lpg=73&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B%26ie%3DUTF-8%26lr%3D%26sa%3DN%26start%3D20&sig=cQlHVOQoFfoTFXEy370E1DIGG0A

Refactoring
http://print.google.com/print?id=1MsETFPD3I0C&pg=0_8&lpg=0_8&prev=http://print.google.com/print%3Fq%3Deffective%2BC%252B%252B%26ie%3DUTF-8%26lr%3D%26sa%3DN%26start%3D60&sig=7OA04xyizjQV5OTZj6Z_ghT2XOE

Using the STL
http://print.google.com/print?id=yOebRChQI3EC&pg=1&lpg=1&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3DC%252B%252B%26sa%3DN%26start%3D40&sig=nxcLEQgOarYxXEilJwQ0PvKbrRw

Programming Pearls
http://print.google.com/print?id=kse_7qbWbjsC&pg=1&lpg=1&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3Dprogramming&sig=kVtR0Am_kklLJZJM-RsMU0kZTkA

The Art of Unix Programming
http://print.google.com/print?id=CZae0PbOXJMC&pg=ii&lpg=ii&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3DScott%2BMeyers%2B&sig=R2EJhu77tz5II0OswOkmGpkTKCE

Practice of Programming
http://print.google.com/print?id=to6M9_dbjosC&pg=ii&lpg=ii&prev=http://print.google.com/print%3Flr%3D%26ie%3DUTF-8%26q%3DScott%2BMeyers%2B&sig=ON0_AtZ26iWX_eDaf4abueDCYss

윈도우가 여러개 설치 되었을 때

2005. 5. 13. 10:46 | Posted by 속눈썹맨
윈도우가 여러개 설치 되었거나 부팅시 여러개를 물어볼 때.

실제로는 1개 인데도 두 번 write되어 두 개로 보이는 경우도 있다.

. 제어판 -> 시스템 -> 고급 -> 시작 및 복구 -> 설정
  기본 운영 체제
  시작 옵션 파일 -> 편집
  C:\boot.ini 파일을 편집하면 됨 (안 보이는 파일이므로 시스템 파일을 보이게 해야 나옴)

Swallow Copy, Deep Copy, Reference Counting

2005. 5. 12. 14:25 | Posted by 속눈썹맨
. Swallow copy
  Object의 값들만 복사.(Reference만 복사)
  C++의 default copy constructor와 default = operator의 역할

. Deep copy
  Object의 값들과 함께 그 안에 모든 Memory공간을 새로 확보하여 복사
  default copy constructor와 = operator를 overload해서 만들면 됨
  Java에서는 clone()를 사용

. Reference Counting(Copy On Write)
  Swallow copy하고 참조된 갯수를 count함
  Reference Couting하다가 Modify가 일어날 때
  Deep copy함

  참고)
  More Effective C++, item29.
  Efficient C++, Chapter 12. 참조횟수(Reference Counting)

Color Scheme Generator

2005. 5. 12. 12:51 | Posted by 속눈썹맨
적절한 컬러와 디자인, 배색을 위한 도구
http://www.colorschemer.com/online.html
http://wellstyled.com/tools/colorscheme2/index-en.html
http://design.geckotribe.com/colorwheel/

팩스(Fax) 보내기

2005. 5. 12. 12:50 | Posted by 속눈썹맨
. 팩스는 항상 보내기 짜증난다.
  기계도 있어야 하고, 사용법도 복잡하다.
. 사용법 : 번호 누르기, 전송, 종이 집어 넣기

. 컴퓨터 + 모뎀 + 파일로된 데이터가 있다면 좀 더 쉽게 보낼 수 있다.
  . 인쇄를 따로하고 팩스 기계를 찾을 필요가 없어서 좋다.
  . 컴퓨터 + 모뎀을 연결한다.
  . 제어판 -> 시스템 -> 하드웨어 -> 장치관리자 -> 모뎀
    -> 모뎀명 클릭 -> 모뎀
  . 포트 번호와 최대 속도를 확인한다.
  . 아래한글 2004에서 보내기
    . 파일 -> 인쇄 -> 팩스
      -> 팩스전송 -> 모뎀설정 -> 모뎀 찾기
      모뎀종류 : Generic Fax/Modem
    . 팩스번호를 누름(구내일 경우 9번을 먼저 적음)
    . 전송
    . 다이얼 업 후 전송 %가 나옴
    . 전송이 100% 된 후 완료 popup창이 뜸.

. 팩스 + 복사기 복합장비
  . 요즘 복사기는 팩스 기능도 내장하고 있다.
   '팩스'라는 버튼이 있는 지 확인해 보자.
   보내기, 받기 모두 가능하다.

. 팩스 번호 알아내기
  . 팩스를 이용하여 휴대폰으로 빈 종이를 팩스로 보낸다.
    휴대폰에 팩스 번호가 뜨고 팩스는 실패한다.

. 팩스의 단점
  . 팩스 보내기 귀찮다.
  . 제대로 전송되었는 지 확인이 힘들다.
  . 받은 팩스를 분류, 나눠주는 작업이 번거롭다.
  . E-mail이 훨씬 편리하다.

참고)
네오위즈 구내에서는 9 + 지역번호 + 번호를 눌러야 한다.
(같은 지방으로 보낼때는 지역번호가 없어도 될 수 있다.)

LG Xnote LM50a의 모뎀
제조사 : Agere Sysmtes AC'97 Modem
포트 : COM3
속도 : 115200

네오위즈 13층 팩스(복사기 겸용) 번호 : 02-6001-1465

Singleton 구현

2005. 5. 11. 18:07 | Posted by 속눈썹맨
참고) Modern C++ Design, Chapter 6 싱글톤 구현

1. Static Member function, Static Member Variable 이용
   . 간단, 생성자를 이용할 수 없음

2. pointer이용
   . 생성자 이용가능
   . Client가 지워버릴 수 있음
   . 소멸이 안됨, 리소스 반환 문제

3. reference 이용
   . 생성자 이용가능
   . Client가 지워버릴 수 없음
   . 소멸이 안됨, 리소스 반환 문제

4. Local Static Member 이용(Meyer방법)
   . 생성자 이용가능
   . Client가 지워버릴 수 없음
   . 소멸이 잘됨
   . 리소스 반환 문제없음
   . Singleton이 다른 singleton을 참조할 때 문제

5. 감지 방법 추가
   . Singleton이 다른 singleton을 참조할 때 문제 handling만 가능, 해결은 아님.  

6. Pheonix Singleton
   . 생성자 이용가능
   . Client가 지워버릴 수 없음
   . 소멸이 잘됨
   . 리소스 반환 문제없음
   . Singleton이 다른 singleton을 참조할 때 문제해결
   . atexit()함수가 reentrent하지 않은 컴파일러, 라이브러리에서는
     문제가 생김.

7. 수명제어 Singleton
   . dependency를 제어해 줄 수 있게 만듬.(longevity 이용)

8. Multithread Singleton
   . Lock으로 보호, 성능이 느림

9. 이중 검사 Multithread Singleton
   . Lock으로 보호, 성능이 빠름
   . Multi CPU일 경우 사용이 불가능 할 수도 있음

세계 지도(world map)

2005. 5. 11. 10:33 | Posted by 속눈썹맨
http://plasma.nationalgeographic.com/mapmachine/
http://www.lonelyplanet.com/destinations/
http://www.lib.utexas.edu/maps/
http://go.hrw.com/atlas/norm_htm/europe.htm