프로그래밍/C++ 스피비 2011. 3. 24. 10:45
1.const 사용방법(복습) const int n1 = 10; //변수를 상수화 const int* n2;//n2가 가르키는 값이 상수 int* const n3 ;//n3가 가리키는 주소값이 상수 const int* const n4 ;//둘다 상수 //const 이상한 사용법(되긴 된다) int a = 10; int b = 20; int const * n5 = &a;//n5가 가르키는 값이 상수 p = &b; //상관없음 *p = 30; //에러!!! const int const * p;//값의 상수화를 두번함( 경고뜸 ) 2.객체와 const의 관계 1.멤버변수를 const로 상수화 -> 반드시 초기화 리스트로 초기화 시켜줘야함 (생성자에서 대입할수 없음) 2.멤버함수를 const로 상수화 -> 1...
프로그래밍/C++ 스피비 2011. 3. 22. 16:59
1.가상함수 1)가상함수가 아닌 보통의 경우 부모클래스형 포인터로 멤버함수를 호출할때, 컴파일러는 정적타입을 보고 이타입에 맞는 멤버함수를 호출한다. (이런 함수를 비가상함수라고함) 실행중 동적타입에 따른 함수를 부르기위해 가상함수를쓴다. 동적바인딩시킨다. 2)가상함수란? =>한마디로 표현하면 동적 결합을 하는 함수 가상함수란, 포인터의 정적 타입이 아닌 동적 타입에 따르는 함수이다. ( 가상함수로 선언하면 포인터의 타입이 아닌 포인터가 가리키는 객체의 타입에 따라 멤버 함수를 선택한다 ) 2)virtual키워드를 선언부에 넣어주면 가상함수가 된다. 부모 클래스 하나만 써주면 다 가상함수가 됨. 무조건 선언부에 써야됨 (정의부에 쓰면 에러남) *동적결합, 정적결합이란? =동적바인딩(dynamic bind..
프로그래밍/C++ 스피비 2011. 3. 22. 16:52
1.객체끼리 대입은 가능할까?????????!?!!??!!!! 디폴트 복사생성자, 또는 사용자가 만든 복사생성자가 있으면 언제든 가능하다. 2. 그럼 상속받은 클래스를 간에는 가능할까??????!?!?! 1). 부모 = 자식 (대입) 허용 O 2). 자식 = 부모 (대입) 허용 X 부모객체는 자식객체를 대입받을수 있지만 자식객체는 부모객체를 대입받을수 없다. 즉. 부모는 자식을 가리킬 수 있다!!!!!!
프로그래밍/C++ 스피비 2011. 3. 22. 16:48
포인터는 두 가지 종류의 타입을 가진다. 포인터 정적타입과 동적타입이란것이 있다. 포인터의 정적타입(Static Type) : 포인터 자체의 타입 포인터의 동적타입(Dynamic Type): 포인터가 실행중에 가리키고 있는 대상체 타입 이게 무슨말이냐면~ Human* h; Sangki s; //여기서 Sangki 는 내이름.............ㅋㅋㅋㅋㅋㅋ h = &s; // 정적타입 : Human*, 동적타입 : Studen // 정적, 동적 타입 불일치 C에서 포인터끼리는 타입이 완전히 일치할 때만 대입이 허용된다. 그러나 C++에서는 상속 관계에 있는 클래스끼리 대입할 때 좌변이 더 상위의 클래스 타입이면 캐스팅을 하지 않고도 직접 대입할 수 있도록 허용한다.( 다형성의 중요한 역할을 한다지요 ㅎㅎ..
프로그래밍/C++ 스피비 2011. 3. 22. 10:56
1.복사생성자란? => 생성자이다. 하지만 복사하는 생성자이다! class SK{ private: intm_a; public: SK(int n) { m_a = n; }; SK( SK& v ){ // 이런식으로 &지정이 꼭 되어야함 // 권장사항: ( const SK& v) 이렇게 레퍼런스와 const 를 지정하는것이 권장사항 m_a = v.m_a; }; }; 2. &를 꼭 붙여줘야한다! 만약 빼먹으면 어떻게 되나? => 무한루프에 빠지게됨! => 이유: call_by_value를 하게 되면서 계속적으로 스택에 복사가 되기 때문이다. 3.생성자엔 디폴트 복사생성자가 있다. ->하지만 디폴트 복사 생성자는 그냥 값에의한 복사만 하는것이라 상당히 위험한 요소가있다.(얕은복사) 4.복사생성자와 얕은복사 -> 블..