Programming/C++ STL2014. 2. 28. 11:01
class_name a;
a =  val;

이런식으로 암시적으로 형 변환을 할 경우에 대해서
제한을 걸어 예측이 힘든 버그들을 막아주는 역활을 한다고 한다.

[링크 : http://opensw.wikidot.com/cpp-fundamentals-explicit]
[링크 : http://msdn.microsoft.com/en-us/library/h1y7x448.aspx]

'Programming > C++ STL' 카테고리의 다른 글

try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
Posted by 구차니
Programming/C++ STL2014. 2. 28. 10:35
const 멤버변수는 초기화가 불가능 하지만 클래스에서 값을 준채로 초기화 할 수 없기에
 constructor(variables ...) : const variable(parameter) 

생성자에서 : 키워드를 이용하여 초기화 한다.(상속이 아니다!!!)
class class_name
{
    const int key; // const member variable

    class_name(int _key) : key(_key)
    {
    }
};  

아무튼.. const 멤버 변수가 하나라도 있으면 모든 생성자에 영향을 주는 듯
class student
{
	const int id;
	int age;
	char name[20];
	char subject[30];

public:
	student()
	{
	}

	student(int _id) : id(_id)
	{

	}

	student(int _id, int _age, char *_name, char *_subject) : id(_id)
	{
		age = _age;
//		id = _id;
		strcpy(name, _name);
		strcpy(subject, _subject);
	}

1>d:\cpp\ch12\ch12\ch12.cpp(13): error C2758: 'student::id' : 생성자 기본/멤버 이니셜라이저 목록에 초기화해야 합니다.
1>          d:\cpp\ch12\ch12\ch12.cpp(7) : 'student::id' 선언을 참조하십시오.
1>d:\cpp\ch12\ch12\ch12.cpp(44): error C2582: 'operator =' 함수는 'student'에서 사용할 수 없습니다. 


+
const 멤버 함수
 ret_type function(parameter ...) const

const 함수 내에서는
값을 조작할 수 없으며(포인터 값 return도 불가)
const 함수만 호출이 가능하다.
 

'Programming > C++ STL' 카테고리의 다른 글

연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
Posted by 구차니
Programming/C++ STL2014. 2. 27. 11:46
객체 복사에 대한 전략이다.

깊은 복사는 캐릭터 배열까지 모든 데이터를 복사하며
얕은 복사는 primitive type 만 복사한다.

얕은 복사의 경우
포인터는 포인터 주소를 복사함으로 2중 delete가 발생할 수 있기에
포인터 사용시에는 new 이후 내용자체를 수작업으로 복사해야 한다.

[링크 : http://en.wikipedia.org/wiki/Object_copy]

'Programming > C++ STL' 카테고리의 다른 글

c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
C++11 Lambda Fuction  (2) 2013.11.20
Posted by 구차니
Programming/C++ STL2014. 2. 27. 11:40
c의 경우 디버깅 시에 crt0.o를 호출하게 되는데
cpp의 경우 crtexe.c 파일로 디버깅이 연결된다.

crt는 C RunTime의 약자인데
crt 대신 다른게 될 줄 알았더니 먼가 싱겁... 


1>  LINK : D:\cpp\ch9\Debug\ch9.exe을(를) 찾을 수 없거나 마지막 증분 링크에 의해 빌드되지 않았습니다. 전체 링크를 수행하고 있습니다.
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: _main 외부 기호(참조 위치: ___tmainCRTStartup 함수)에서 확인하지 못했습니다.
1>D:\cpp\ch9\Debug\ch9.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========  

'Programming > C++ STL' 카테고리의 다른 글

c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
C++11 Lambda Fuction  (2) 2013.11.20
C++ AMP (Accelerated Massive Parallelism)  (0) 2013.10.08
Posted by 구차니
Programming/C++ STL2014. 2. 26. 10:49
클래스를 생성한뒤 값을 주거나
값을 주어 생성하는 경우 어떻게 다른가 테스트

일단.. operator= 와 같이
할당연산자가 기본으로 생성되어 그런건지 모르겠지만
클래스를 만들고 나서 값을 할당하는 경우와는 또 다르게 움직인다.

그리고 생성자가 마치 할당연산자 같이 작동하는 신기한 현상을 발견...
아아 c++ 어려워 ㅠㅠ

#include < iostream >

using namespace std;

class test
{
	int a1, a2;
	int a;

public:
	test()
	{
	}

	test(int b)
	{
		cout << "constructor called" << endl;
		a = b;
	}

	void dump()
	{
		cout << a1 << ' ' << a2 << ' ' << a << endl;
	}
};

void main()
{
	cout << "tt" << endl;
	test tt;

	cout << "t2(11)" << endl;
	test t2(11);

	cout << "tt = 11" << endl;
	tt = 11;

	cout << "tt = 55" << endl;
	tt = 55;

	tt.dump();
	t2.dump();
}

tt
t2(11)
constructor called
tt = 11
constructor called
tt = 55
constructor called
-858993460 -858993460 55
-858993460 -858993460 11 

생성자를 주석처리하여 실험해보면
operator= 일수도 있다고 연결되는 걸 봐서는... 쩝...
1>error C2679: 이항 '=' : 오른쪽 피연산자로 'int' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다.
1>          'test &test::operator =(const test &)'일 수 있습니다.
1>          인수 목록 '(test, int)'을(를) 일치시키는 동안 

[링크 : https://kldp.org/node/31436]
[링크 : http://skmagic.tistory.com/entry/복사생성자와-대입연산자의-차이]
[링크 : http://msdn.microsoft.com/ko-kr/library/c5at8eya.aspx ]

'Programming > C++ STL' 카테고리의 다른 글

deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
C++11 Lambda Fuction  (2) 2013.11.20
C++ AMP (Accelerated Massive Parallelism)  (0) 2013.10.08
c++ class - friend  (0) 2013.03.15
Posted by 구차니
Programming/C Win32 MFC2014. 2. 25. 10:37
c++ 레퍼런스를 보다 보니
포인터에 const가 붙으면 어떻게 접근보호가 될지 궁금해 검색을 해보니 똭! ㅋㅋ

const 포인터
const void *p = &ori;
포인터의 주소 변경 불가(레퍼런스 화?) 내용 변경 가능

포인터 const
void const *p;
포인터 주소 내의 내용  변경 불가

const 포인터 const
const void const *p
포인터 주소 및 주소 내의 내용 변경 불가

[링크 : https://kldp.org/node/48414]
[링크 : http://quoobit.egloos.com/1379839]

+ 특이사항으로는..
const 변수를
포인터로는 조작이 가능하다는거.. 당연한걸지도 모르겠지만... ㄷㄷㄷ 

int main()
{
        const int a = 0;
        int *p;

        p = &a;

        printf("%d %d\n",a,*p);

        *p = 2;
//      a = 1;

        printf("%d %d\n",a,*p);

        return 0;
} 

$ ./a.out
0 0
2 2

어짜피 const는 컴파일 타임에 결정되는 것 이기에
메모리 상에 주소로 접근시에는 해당 메모리 영역이 read-only인지 알 수 없기에
포인터로 (const 포인터 const라면 안되겠지만) const 영역의 데이터를 조작이 가능하다는 놀라운(?) 사실 ㄷㄷ

---
2014.3.5 추가
gcc 에서는 문제없이 되지만 vs2008에서는 에러가 난다. 
1> error C2440: '=' : 'const int *'에서 'int *'(으)로 변환할 수 없습니다.
1>        변환하면서 한정자가 손실됩니다. 

또한 gcc에서 되던 문법이 경고가 발생한다.
const int const *p1;
1> warning C4114: 동일한 형식 한정자를 두 번 이상 사용했습니다.  



'Programming > C Win32 MFC' 카테고리의 다른 글

2중 포인터 사용이유  (0) 2014.03.19
typeof  (0) 2014.03.11
assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
win32api - joystick 예제  (0) 2013.06.15
Posted by 구차니
음.. 머 끝물이라서 C끝나고 C++ 들어갔는데
그래도 학원에서 배우면 좀 나을까 싶은 기대가 없는건 아니었지만..
막상 수업을 들으려니 오전 수영의 여파로 헤롱헤롱 ㅠㅠ

그래도.. 공짜(?)니까 열심히 들어야지 ㅠㅠ 

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

ATC 2급 2전 1패 1승!!  (2) 2014.03.17
끄아아 내 6만원 ㅠㅠ 아니 12만원?  (0) 2014.03.03
ATC 2급 시험  (0) 2014.02.22
날릴 가능성이 조금 더 높지만.. 등록!  (0) 2014.02.18
연봉이 먼지...  (4) 2014.02.16
Posted by 구차니
게임/마비노기2014. 2. 23. 22:00
애인네 집 정리 도와주러 갔다가 강탈 ㅋㅋㅋ




빛을 받으면 신세계를 본다는 나오 브로마이드는 없어서 아쉽지만 이거라도 ㅋㅋㅋ
Posted by 구차니
타원 3개에 적당히 무난한 난이도의 시험이라고 해야하나..
연습해왔던 것에 비해서는 예상외로 낮다고 할 정도

아무튼 붙었으면 좋겠는데..
이렇게 쉬웠다고 하고는 떨어지면 무슨 쪽팔림이 되려나? ㅠㅠ 
Posted by 구차니
개소리 왈왈/수영2014. 2. 21. 23:41
기존에 고개를 평평하게 드는것으로 생각했으나
실제로는 고개가 뒤로 넘어가서 저항의 증가로 속도가 나지 않는 문제가 있었다. 

이번에 강습을 들으며 배운건
턱을 가슴에 붙이고 발끝이 수면에 보일정도로 높이 차라는거
아무래도 발을 높이 차려고 하지만 반동으로 인해서 자꾸 발이 가라앉아
실제로 차는 높이는 높지 않았던게 문제.. 

'개소리 왈왈 > 수영' 카테고리의 다른 글

헤딩한지.. 4일...차?  (0) 2014.03.02
접영 영업 업그레이드  (0) 2014.03.01
접영 영법 ...  (0) 2014.02.13
올해 수영 업그레이드  (0) 2014.02.07
오리발 지름 + 나 돌아갈래 ㅠㅠ  (0) 2014.02.06
Posted by 구차니