C++ 표준은 아니고 VC++ 7.0에서 생긴 키워드로 자식 클래스에서 부모 클래스의 멤버를 호출할 때 사용하면 편합니다.

이 키워드를 사용하면 부모 클래스의 이름이 바뀌어도 변경 없이 부모 클래스의 멤버를 호출할 수 있습니다.

 

MSDN : http://msdn.microsoft.com/en-us/library/94dw1w7x%28v=vs.80%29.aspx

 

< 예제 코드. MSDN에서 >

struct B1 {

   void mf(int) {}

};

 

struct B2 {

   void mf(short) {}

 

   void mf(char) {}

};

 

struct D : B1, B2 {

   void mf(short) {

      __super::mf(1);   // Calls B1::mf(int)

      __super::mf('s');   // Calls B2::mf(char)

   }

};

 

 

by 흥배 2012.05.30 09:00

예전에 Visual C++ 10과 관련된 책을 집필할 계획이 있어서 그때 작성한 글인데 책 출간 계획이 사라졌으므로(한참 전에)

그냥 공개합니다. 글은 초보자를 타겟으로 하고 있으며 Visula C++ 10의 디버깅 기능을 설명하고 있습니다.


도움이 되었으면 좋겠습니다^^



6장 디버깅.pdf


by 흥배 2012.04.23 09:00
new를 사용하여 배열로 동적 할당을 한 경우 삭제할 때는 delete[]를 사용합니다.

이때 배열의 크기는 어디에 저장되어 있기래 delete[]로 할당한 크기를 정확하게 삭제할까?
라는 의문을 가지는 분들도 있을 것입니다.

테스트를 해 본 결과 GCC 4.6과 VC++10의 경우는 배열로 할당한 곳의 가장 선두 위치에 배열의
크기를 기록해 두는 것 같습니다.

단 이것은 할당하는 객체가 소멸자가 있는 경우이고 소멸자를 호출할 필요가 없는 것은
크기를 기록하지 않는 것 같습니다.

아래는 테스트 코드 입니다.
#include <iostream>

struct X {
    X()
    {
        std::cout << "X의 생성자" << std::endl;
    }

    ~X()
    {
        std::cout << "X의 소멸자" << std::endl;
    }
};

struct Y
{
};

int main()
{
    const std::size_t n = 3;
   
    std::cout << "X 테스트" << std::endl;
    X* pX = new X[n];
    std::cout << *(reinterpret_cast<std::size_t*>(pX) - 1) << std::endl;
    delete[] pX;

    std::cout << std::endl << std::endl;

    std::cout << "Y 테스트" << std::endl;
    Y* pY = new Y[n];
    std::cout << *(reinterpret_cast<std::size_t*>(pY) - 1) << std::endl;
    delete[] pY;
}


결과






참고 : http://d.hatena.ne.jp/faith_and_brave/20120224/1330058808


by 흥배 2012.03.05 09:00
1.49 버전의 대부분은 기존 라이브러리의 버그 수정과 기능 추가입니다.


신규 라이브러리는 아래와 같습니다.
Heap
: 우선 순위 큐 구조의 구현


버그 수정 및 기능 추가된 라이브러리
Asio
Chrono
Container
Filesystem
Geometry
Graph
Icl
Interprocess
Intrusive
Lexical cast
Locale
Move
Property Tree
Spirit
Thread
Unordered
Uuid
by 흥배 2012.02.26 17:32

VS2010 팀블로그에서 현재 미리 보는 C++11’‘Direct2D’ 강좌가 연재 되고 있습니다.

미리 보는 C++11’은 아직 VC++에서 지원해주지 못하고 있지만 새로운 C++ 표준에 들어가는 기능들을 하나씩 소개하고 있습니다. 컴파일러에서 아직 구현되지 않아서 대부분은 실제 사용해 볼 수가 없지만 새 표준에 들어가는 라이브러리 중 일부는 Boost 라이브러리를 통해서 사용해 볼 수 있습니다.

 

[미리 보는 C++11] 1. UTF-8, UTF-16(char_16t), UTF-32(char32_t) 문자형

[미리 보는 C++11] 2. override final

[미리 보는 C++11] 3. constexpr - 1

[미리 보는 C++11] 4. constexpr - 2

 

앞으로 새로 등록될 글은 아래에서 볼 수 있습니다

http://vsts2010.net/category/C++0x

 

 

 

‘Direct2D’ Windows 7에서 새로 생긴 Win32 API로 기존의 GDI를 대체할 수 있는 강력한 것입니다. 이름을 보면 알 수 있듯이 DirectX와 관계가 있습니다. Direct2D를 사용하면 2D 렌더링에 한해서는 어려운 DirectX를 배우지 않고도 DirectX로 할 때의 성능과 효과를 얻을 수 있습니다.

그리고 Direct2D Windows 8에서도 데스크탑 환경에서 돌아가는 프로그램을 만들 때는 최적의 선택입니다(C++ + XAML WinRT 환경 즉 Metro UI에서만 사용할 수 있습니다)

 

[StartD2D-1] Good-bye~~ GDI…

[StartD2D-2] GPU 인가?

[StartD2D-3] Direct2D 프로그래밍 시작하기!!!

[StartD2D-4] WIC 를 이용한 이미지 작업하기

[StartD2D-5] Direct2D의 리소스 기본 개념.

[StartD2D-6] 이동/회전 변환 이해하기

[StartD2D-7] 변환의 중심과 확대/축소/찌그러짐

[StartD2D-8] 투명 이미지 다루기

 

 

앞으로 새로 등록될 글은 아래에서 볼 수 있습니다

http://vsts2010.net/category/DirectX%2011

 

 

by 흥배 2011.10.04 09:30

VS 2003이나 VS2005에서 만든 VC++ MFC 프로젝트를 VS2008로 업그레이드 했을 때 아래와 같은 에러가 발생할 수 있습니다.

error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CXXX::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'

 

이것은 VS2005에서는 ON_WM_NCHITTEST 메시의 함수로

afx_msg UINT OnNcHitTest(CPoint point);

로 정의 되지만 VS2008에서는

afx_msg LRESULT OnNcHitTest(CPoint point);

로 정의 되기 때문에 발생하는 문제입니다.

 

 

해결 방법

함수의 반환 타입을 UINT에서 LRESULT로 바꾸면 해결됩니다.

 

by 흥배 2011.02.10 09:00

VS 2003이나 VS2005에서 만든 VC++ 프로젝트를 업그레이드 했을 때 아래와 같은 에러가 발생할 수 있습니다.

manifest authoring error c1010001: Values of attribute 'level' not equal in different manifest snippets

 

 

해결 방법

[프로젝트 속성] – [링커] – [매니페스트 파일]을 선택하여

uac 실행 수준을 reuireAdminstrator

로 설정합니다.



참조 : http://www.sojins.net/tt/sojins/1084

 

by 흥배 2011.02.01 09:00

오늘 새로운 프로젝트를 만든 후 디버그 모드에서는 빌드가 성공해서 릴리즈 모드로 빌드를 했는데

Error 2 general error c101008d: Failed to write the updated manifest to the resource of file ".\Debug\eConsole.exe". The process cannot access the file because it is being used by another process. mt.exe "

 

위와 비슷한 에러가 발생했습니다. 혹시나 해서 비주얼스튜디오를 종료하고 다시 실행 후 빌드를 해도 같은 에러가 발생하더군요.

 

그래서 즉시 구글링에 들어가니 역시나 저 이외에도 이런 문제를 겪은 사람들이 있더군요

 

답글을 대충 보니 해결 방법은 두 가지였습니다.

 

1. 백신 프로그램이 mt.exe를 웜으로 오인하여 발생했으므로 백신 프로그램에 mt.exe는 신뢰할 수 있는 프로그램으로 등록시켜서 해결

 

2. 메뉴의 [도구] -> [옵션] -> [프로젝트 및 솔루션] -> [빌드 및 실행] 에서 최대 병렬 프로젝트 빌드 수를 낮춘다.

 

제 경우는 1번은 아니라고 판단해서 2번대로 해보니 해결 되었습니다. 제 경우는 최대 병렬 프로젝트 빌드 수의 값이 4였는데 이것을 2로 바꾸니 에러가 발생하지 않았습니다.

 

 

참고로 제가 사용한 Visual Studio 2008 SP1입니다.

 

by 흥배 2010.12.28 09:00

현재 SP1 베타가 나온 상태입니다.

개인적으로 제가 생각한 부분과 꽤 다른 부분이 많았습니다. 저는 Concurrency Runtime의 컨테이너나 알고리즘이 추가될지 알았는데 그렇지 않고 의외로 MFC에서 추가가 있었습니다.

 

추가되는 기능은

MFC-based GPU-accelerated graphics and animations

New AMD and Intel Instruction Set Support

Managed Incremental Build parity with Visual Studio 2008

Help Viewer

Addressing Customer Issues

 

 

그리고 VC++에 해당하는 버그 픽스 리스트는 아래와 같습니다.

 SSE2 instructions generated when /arch:SSE is specified

Missing destructor calls when optimization is enabled

Code generation bug in x64 C++ compiler (optimizer)

C++ compiler generates incorrect movups instructions iso movss

Optimizer bug (/Og) with the 64-bit 2010 Beta 2 compiler.

Visual Studio 2010 VC++ Concurrent Runtime libraries leak memory

concurrent_queue causes crash

Memory leaks reported when using simple parallel_for code

ftell returns negative value for UTF-8 files opened with textmode and ccs

vector::erase returns incompatible iterator in debug build

tr1:regex has different behavior between vs2008 and vs2010 on some regular expression

inserting in a std::vector of std::string causes memory leak

CRecordset/DoFieldExchange not working properly in Visual Studio 2010

 

 

 

MFC-based GPU-accelerated graphics and animations Win32 API Direct2D, DirectWrite Windows Animation Manager MFC용 라이브러리를 말합니다. 이중 Direct2D, DirectWrite Win7에서만 사용할 수 있습니다. Win7에서 GDI를 사용한다는 것은 크나큰 하드웨어 낭비입니다. 가능한 Direct2D, DirectWrite를 사용해야 합니다. Direct2D, DirectWrite는 기존의 GDI DirectX와 통합도 잘 됩니다. 만약 Win7에서 2D 게임을 만든다면 어렵게 DirectX를 사용할 필요 없이 Direct2D를 사용하면 됩니다.

 

 

몇 달 전에 VC++ MVP들의 메일링에서 Direct2D 같은 것들이 MFC에 안들어왔냐? MFC 버리기냐? 라고 따진 분이 계셨는데 드디어 들어왔네요. 정말 오랜만에 MFC에 공부할게 생겼네요^^

 

 

SP1에 대한 자세한 내용은 아래를 참고하세요

http://blogs.msdn.com/b/vcblog/archive/2010/12/09/vs2010-sp1-beta-what-s-on-it-for-c-developers.aspx

http://blogs.msdn.com/b/jasonz/archive/2010/12/20/visual-studio-2010-service-pack-1-beta-feedback.aspx

 

by 흥배 2010.12.22 00:40
세미나에서 제가 살짝 정신줄을 놓아서(? -_-;;) 이 부분 설명이 미흡했는데

int* p = nullptr;
p = new int[200];

에서 p의 첫번째 위치에서 11번째만 보고 싶은 경우는
(p+10)



11번째에서 5개만 보고 싶은 경우는
(p+10), 5




by 흥배 2010.12.16 21:57
| 1 2 3 4 5 6 |