반응형

개발/C++ 37

[C++] linux 환경에서의 Qt 설치법

포토폴리오로 리눅스 환경에서의 GUI 프로그램 개발 프로젝트가 필요해서 이번 한 해동안 영상 처리 관련 프로그램만 개발한 것을 압축시켜서 GUI에서 모두 실행시킬 수 있는 프로그램을 개발하고 있다. Qt에 대해서는 시간이 넉넉해지면 포스팅 하겠다. 이 글은 까먹지 않도록 작성해놓은 글. 그리고 센트os와 우분투에서 OpenCV 설치법, 웹캠 인식이 안됐을 경우에 대한 포스팅도 작성하도록 하겠다.

개발/C++ 2016.11.20

[C++] 생성자에 return이 없는 이유?

친구와 정적 생성, 동적 생성에 대해서 이야기 하다가 생성자로 이야기가 넘어갔다. 생성자에는 명시적으로 return을 사용할 수가 없는데 그 이유가 무엇인지에 대해서 이야기를 나누었다. 동적으로 객체를 생성하면 초기화가 완료된 후 객체의 포인터가 리턴되기 때문에 참조변수가 된다. 즉, 명시적인 return을 사용하지 못하는 것이다. 포인터를 리턴하기 위해서. 그렇기 때문에 나는 생성자에는 반환값이 없다라기 보다는 묵시적인 반환값 때문에 명시적인 반환을 하지 못한다고 본다. 이것을 확인할 수 있는 방법이 typeid 를 사용하는 것이다. [그림 1: 반환 값 알아내기] 출력 결과는 보시다 시피 class A * 이다. 포인터를 반환한다는 소리이다. 이 글을 쓰다보니 또 궁금증이 발생했다. new 를 빼면?..

개발/C++ 2016.11.16

[C++] 두 수의 나누고 소수점까지 출력

C++에서는 double 형 변수로 %를 쓰려고 하면 오류가 발생한다. 알고보니까 C++에서는 int 형에서만 %가 사용할 수 있다는데 깊은 빡침이 올라왔다. #include int main(){int a = 0.0;int b = 0.0; std::cin >> a >> b; std::cout.precision(9); //소수점 9자리까지 출력한다는 뜻std::cout.setf(std::ios::fixed, std::ios::floatfield); //소수점을 출력시켜준다. //위에 9자리까지 출력시켜준다는 코드가 없다면 디폴트로 소수 6자리까지 출력시켜준다. if (0 < a && b < 10) {std::cout

개발/C++ 2016.10.06

[C++] interface?

인터페이스? C++에서의 인터페이스를 알기 전에 Java에서의 인터페이스는 어떤 역할을 했는지 한 번 알아보자. 나는 인터페이스를 다형성, 즉 다양하게 활용?하기 위한 것과 프로토콜처럼 규약 때문에 사용한다고 알고 있다. 그렇다면 C++에서의 인터페이스는 무엇을 말하는 것일까? Effective C++에서는 인터페이스를 함수의 시그너처, 혹은 어떤 클래스의 접근 가능 요소(public 인터페이스, protected 인터페이스, private 인터페이스)라든지, 템플릿의 타입 매개변수로서 유효해야하는 표현식 등을 가리킨다고 말한다. 즉, 쉽게 말해서 이 책의 필자가 말하는 인터페이스는 일반적인 설계 인터페이스를 말하는 것 같다.

개발/C++ 2016.10.03

[C++] 복사 생성자

C++에는 복사 생성자라는 것이 있다. 이 복사 생성자는 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로부터 초기화할 때 호출되는 함수인데 나는 이 복사 생성자가 헷갈리고 실수를 많이 할 수 있을 부분이라 중요하다고 생각한다. [복사 생성자] class ABC {private:int a;int b;public:ABC(int _a, int _b) : a(_a), b(_b) {}}; void main{ABC abc(5, 10);ABC abc2(abc); //abc2의 a, b를 출력하면 5, 10 이 정상적으로 출력이 된다. //ABC abc = ABC(5, 10);//ABC abc2 = abc;}; 이 코드를 보면 뭐가 문제지? 라는 생각을 할 수도 있다. 하지만 여기서 중요한 것은 바로 ‘ABC ab..

개발/C++ 2016.10.03

[C++] 생성자 explicit

explicit 의 의미 explicit: explicit로 선언된 생성자는 암시적인 타입 변환을 수행하는데 쓰이지 않게 된다. 그러나 타입 변환이 명시적으로 되는 곳에는 생성자를 쓸 수 있다. [생성자 explicit 예] class ABC{public:explicit ABC(int x=0, int y=0);ABC(bool a=true, int a=0);};ABC a;a = 10; //오류. explicit 때문에 암시적 타입 변환 Xa = true; //Gooda = ABC(10); //Good. explicit로 선언된 생성자는 명시적 타입 변환은 된다! 이렇게 explicit를 사용하면 코딩할 때 바라지않던 타입 변환을 막아 주기 때문에 암시적 타입 변환에 생성자가 사용될 여지를 남겨둘 이유가 없..

개발/C++ 2016.10.01

[C++] 함수 시그너처(signature)

시그너처(signature)가 뭐냐 시그니처라는 단어에 대해서 전혀 알지도 못하고 있었는데 책에서 등장했다. 시그니처(signature): 어떤 함수의 선언문에는 시그니처가, 다시 말해 매개변수 리스트와 반환타입이 나와있는데 시그니처가 그 함수의 타입이다. 예를 한번 들어보겠다. [시그니처의 예] int getMoney(Money money) 여기서의 getMoney의 시그니처는 int(Money)이다. 해결되었다.

개발/C++ 2016.10.01

[C++] 선언

나는 다른 방식으로 글을 써보려한다. 내가 현재 읽고 있는 책은 “Effective C++” 이라는 책이며 내가 읽을 만한 난이도보다 좀 더 높은 난이도의 책이지만 이 책에 나와 있는 개념, 내용들 중 내가 모르는 것이 나오면 그것에 대해 검색을 하면서 좀 더 알아갈 수 있으며 이 책이 재밌다고 생각하기 때문에 선택했다. 선언에 대해서 다시 한 번 짚고 가자 선언과 정의는 개발자는 거의 모두 한번 이상은 사용해 본 적이 있을 것이다. 하지만이 두 가지의 단어가 가지는 뜻을 모르거나, 헷갈려하는 사람들이 있다. 선언: 코드에 사용되는 ‘어떤 대상’의 이름과 타입을 컴파일러에게 알려 주는 것이지만 세부사항은 들어 있지 않다. 예를 한번 보자. [선언의 예] extern int x; //객체 선언 std::s..

개발/C++ 2016.10.01
반응형