Type CastingUpcasting & Downcasting이해를 돕기위해 아래와 같은 클래스가 있다고 하자.#include class Car{public: Car(std::string name) : name_(name) {} const std::string &name() const { return name_; }private: std::string name_;};class Bus : public Car{public: Bus(std::string name) : Car(name), money_(0), bus_name_("BBus") {} void GetCharge(int charge) { money_ += charge; } int money() { return money..
Make를 사용해야하는 이유1학년때는 Window에서 visualstduio를 사용해 Run버튼 딸깍 누르면 실행되는 건 줄 알았지만 리눅스 세상에서는 어림도없다.소스코드를 빌드하기 위해서는 컴파일과 링킹단계를 거치는데 소스코드를 기계어로 바꾸는 컴파일 단계와 실행파일로 만들기 위해 어떤 목적파일(.o)들이 필요한지 명시해주는 링킹단계가 필요한데 이들을 매번 Shell에 입력할 수 없으니 하나의 파일로 만들어 둬야하고 이 파일이 Makefile이다. 아래에서는 실습 때 사용한 Makefile을 예제로 어떻게 작성하는지와 어떻게 동작하는지에 대해서 알아본다.아래 글은 아주 잘 정리된 글이니 이 글을 읽고오면 아래 예제 파일을 이해하기 쉽다.씹어먹는 C++ - Makefile 실전아래 코드는 Makefi..
참조리턴참조리턴은 함수의 반환값을 반환할 때 참조를 사용해 리턴하는 것을 말합니다.함수에서 객체나 값을 반환할 때 복사되어져서 전달되게 되는 데 이런 불필요한 복사를 막을 수 있어 효율적인 프로그램을 만들 수 있는 방법입니다. 간단한 예시를 통해 참조리턴을 이해해보도록 하겠습니다. 1) 값 전달 방식(참조를 사용하지 않은 경우)참조를 사용하지 않은 경우 위와 같이 add함수안에서만 생명력을 가지는 변수 n이 생성됩니다. 그리고 반환을 할 때도 n의 값을 전달하는 방식입니다. 2) 참조를 통한 전달(매개변수에만 참조를 사용한 경우)참조로 매개변수를 받으면 a라는 변수의 별명이 n으로 추가되는 것입니다. 그래서 1번 방식에서의 불필요한 복사생성을 안해도 되는 장점이 있지만, 값 변경이 목적이 아니라 단순히 ..
복사생성자복사생성자함수는 복사 생성 시에만 실행되는 특별한 생성자입니다.클래스에서 오직 1개만 존재할 수 있고, 매개변수도 오직 하나로 자기 클래스에 대한 참조입니다.선언형식은 다음과 같습니다.class ClassName { ClassName(const ClassName& c);}; const는 붙여도되고 안붙여도되지만 참조를 통한 전달의 유일한 단점이 원본이 바뀔 수 있다는 점임을 고려했을 때 const를 붙이게 되면 원본이 바뀌게 되는 상황을 방지할 수 있어 붙이는 것이 좋습니다. &를 붙여 참조를 통해 전달하는 이유는 값 전달 방식(call by value)로 매개변수를 전달함에따라 불필요한 복사생성이 생기기 때문에 효율성 증대를 위해 사용한 것입니다. 복사생성자가 필요한 이유#includeusi..
연산자 중복연산자 중복이란 이미 역할이 정해져 있는 연산자에 다른 의미를 부여하는 것을 말합니다. 예를 들어, '+' 연산자를 생각해보면 수학에서는 + 연산의 연산대상에 값이 오지만 실제 세계는 " 8분 음표 + 8분 음표 = 4분 음표"와 같이 다양한 것들이 오고 우리는 그것을 이상하게 여기지 않습니다. 이런 것을 반영하고 연산자의 쓰임을 늘리기 위해 연산자 중복이 존재합니다. 연산자 중복까지 공부하셨다면 string 클래스를 아실겁니다. string을 +연산자로 더하면 문장이 합쳐집니다. +연산자가 string 클래스가 연산대상으로 왔다는 것을 확인하고 적절한 연산을 해주는 것입니다. 연산자 중복 함수를 만드는 방법다음은 연산자 중복 함수선언 형식입니다.리턴타입 operator 연산자(매개변수리스트..
static 멤버변수, static 멤버함수static 멤버변수와 static 멤버함수는 같은 클래스의 객체들이 공유할 수 있는 변수와 함수입니다. static 멤버변수는 일반 변수처럼 객체마다 생성되는 것이 아닌 "공유변수"로써 클래스 당 1개만 있는 것입니다. 예를 들어, 사람들이 의견을 공유하는 게시판이 있다고 생각해봅시다. class Board 게시판에는 다양한 사람들이 글을 씁니다. 그리고 그 기록들이 차곡차곡 쌓이죠. 글 하나하나는 객체라고 볼 수 있고, 글이 쌓인 집합이 static변수로 볼 수 있습니다. 아래에서 관련예제를 보도록 하겠습니다. static 변수,함수 사용법static 멤버를 사용하기 위한 방법으로는 두 가지가 있습니다. 1. 객체의 멤버로 접근하는 방법2. 클래스명과 범위지..