본문 바로가기
Programming/C & C++

Class 코딩시 알아두면 좋은 내용들

by leanu 2008. 9. 30.
1. 멤버 함수파라미터default value 를 이용하고자 한다면 형선언 부분에만 넣어주고 구현 부분에는 넣지 않는다.

(예)
class testClass
{
private:
        void print(const char* message, ostream& outputStream = cerr) const;
};

void testClass::print(const char* message, ostream& outputStream) const
{
        outputStream << message;
}


2. fprintf처럼 화면에 출력할 건지 파일로 출력할 건지를 선택하여 출력하는 인자가 c++에도 있다. 바로 ostream 이란 녀석인데 이 인자로 cout 이나 cerr 를 전달하면 화면에 출력할 것이고 ofstream 으로 규정한 인자를 넘긴다면 그에 해당하는 파일로 출력될 것이다. 아래의 예제는 이 속성을 이용한 한가지 예이다. 응용해서 써보도록 하자.

(예) 위의 1번 예제에서 구현한 testCase를 참조해 보자.

int main()
{
      testClass test;
      ofstream fpout;
      fpout.open("output.txt");

      test.print("Screen output"); // use default value. It will show message into screen
      test.print("Screen output", cerr); // It will also show the message into screen
      test.print("File output", fpout);  // it will show the message into output.txt file
}

3. 생성자에 키워드 explicit 를 써준경우 =을 이용한 자동 생성자 호출을 방지하고(암시적 변환) 명시적으로 선언된 경우만 허용한다.

(예)
class test_one
{
public:
    test_one(){};
    test_one(double a){};
    ~test_one(){};
};
class test_two
{
public:
    test_two(){};
    explicit test_two(double a){};
    ~test_two(){};
};

void foo(test_one var)
{
   cout << "foo is called" << endl;
}
void foo2(test_two var)
{
   cout << "foo2 is called" << endl;
}

int main()
{
      test_one t1_1;
      test_one t1_2(300);    // 명시적 생성자.   사용가능
      test_one t1_3 = 200;   // 암시적 생성자.   사용가능
      t1_2 = 2.0;                // 암시적 생성자.   사용가능
      foo(3.0)                   // 암시적 생성자가 가능한 test_one 인자가 호출됨.
                                    // 화면에는 "foo is called"라고 출력됨
      test_two t2_1;
      test_two t2_2(300);    // 명시적 생성자.   사용가능
      test_two t2_3 = 200;   // 암시적 생성자.   사용불가. compile error발생.
      test_two t2_2 = 2.0;    // 암시적 생성자.   사용불가. compile error 발생.

}

댓글