프로그래밍/Effective C++(35)
-
(작성중)배열 vs 다형성(more effective c++ 03)
다형성기본 클래스 객체의 포인터나 참조자를 통해 파생 클래스 객체를 조작할 수 있다.이런 포인터와 참조자를 다형성을 가지고 있다라고 말한다.마치 여러개의 타입처럼 쓰인다는 말이다. 파생 클래스 객체의 배열(array)을 기본 클래스 포인터나 참조자를 이용해 다형적으로 사용하려고 하면?.. 이것은 문제!- 컴파일러는 배열에 들어있는 각 객체의 크기가 sizeof(base 객체)라고 가정한다.(실제로는 derived 객체여야 하기때문에 문제가 생긴다.)- 컴파일러는 배열의 크기만큼 메모리를 읽기 때문에 결과를 예상할 수 없다.
2015.07.25 -
C++ 캐스팅(more effective c++ 02)
프로그래밍계의 1급 기피대상.goto와 cast는 재앙이라고 한다... C 스타일 캐스트?C 스타일의 캐스트는 어떤 타입을 다른 타입으로 아무 생각 없이 바꿔주는 괴물!- 캐스팅 다양성이 부족(상수성만 바꾼다던지. 파생 클래스 객체에 대한 포인터로 바꾼다던지?)- 눈으로 찾아내기 힘든 버그가 많다. static_castC 스타일 캐스트와 같다. const_cast상수성(constness)나 휘발성(volatileness)을 없애는 목적으로 사용하는 캐스팅 dynamic_cast상속 계층 관계를 가로지르거나 하향시킨 클래스의 타입으로 안전하게 바꿔주는 캐스팅제약 - 상속 계층 구조를 오갈때만 사용, 가상 함수가 없는 타입에는 적용할 수 없다.* 어떤 객체가 차지하고 있는 메모리의 시작부분을 찾는 데에도 쓴..
2015.07.25 -
객체 초기화(effective c++ 04)
서론C++의 객체 초기화는 중구난방!물론 규칙은 있다.C++의 C 부분은 사용하고 있으며 런타임 비용이 소모될 수 있는 상황이라면 초기화 된다는 보장이 없다.C가 아닌 부분은 때때로 달라진다.예시) 배열 vs 백터 모든 것을 해결하는 방법!모든 객체를 사용하기 전에 항상 초기화 하는 것. 생성자대입(assignment)과 초기화(initialization)을 구분하자. 1234567891011121314151617181920212223242526272829303132333435363738394041424344// ConsoleApplication7.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.//// 작성자 조민혁 #include "stdafx.h"#include class MyClass{p..
2015.07.24 -
pointer vs reference (more effective c++ 01)
기본용어pointer - 포인터 "*", 포인터 연산 - "->"reference - 참조자 "." 무엇이 다른가요?참조자 개념엔 널 참조자(null reference)가 없다.객체를 함조하는 어떤 변수가 가리키는 메모리는 항상 유효한 객체여야만 한다.참조자를 썼다는 것은 그 변수가 널일 가능성을 완전히 배제할때 사용해야한다. 12345678910111213141516171819202122232425262728// ConsoleApplication6.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.// #include "stdafx.h"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ // 에러 참조자는 반드시 초기화 해야한다..
2015.07.21 -
private 상속에 대하여(effective c++ 39)
public 상속?C++는 public 상속을 is-a 관계로 나타낸다. private 상속을 하게 되면 어떤일이 생기나요?- 컴파일러는 파생 클래스 객체를 기본 클래스 객체로 변환하지 않는다. - 베이스 클래스로부터 물려받은 멤버에서 파생 클래스에서 모조리 private 맴버가 된다. 베이스 클래스에서 protected 이거나 public이어도. private 상속은 그 자체로 구현 기법 중 하나.- 구현만 물려받을 수 있으며 인터페이스는 허용하지 않는다.- 소프트웨어 설계 도중에는 아무런 의미가 없다. 단지 소프트웨어 구현(implementation) 중에만 의미를 가진다. 현실적으로 private 상속 대신에 public 상속에 객체 합성 조합이 더 즐겨 쓰는 방법이긴하다.장점은 무엇인가?- 객체 ..
2015.07.19