C++ 프로그래밍

    다형성-가상 함수와 동적 바인딩의 의미

    다형성-가상 함수와 동적 바인딩의 의미

    가상(virtual) 함수는 실제로는 어떤 함수가 실행될지 결정되기도 전에 미리 사용되었다고 해서 가상이라는 이름을 얻었습니다. 가상 함수는 실행시간 다형성을 구현하는 방법으로, 소프트웨어의 재사용을 위한 중요한 도구입니다. 함수를 가상으로 선언하는 것은 개발자가 컴파일러에게 "나는 어떤 함수가 호출되어야 할지 모르겠으니 함수 결정을 미루어라. 실행시간에 실제로 객체가 만들어지고 난 다음 결정하라"라고 알려주는 것입니다. 2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-상속에서의 형 변환 다형성-상속에서의 형 변환 1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이..

    다형성-다형성이란?

    다형성-다형성이란?

    개인적으로다형성이란 객체지향의 꽃이라고 할 수도 있다고 생각합니다. 상속을 완벽하게 하기 위해 다형성을 사용해야하니까요. 다형성(Polymorphism)이란 프로그래밍에서는 다양한 종류의 객체에게 동일한 메시지를 보내더라도 각 객체들이 서로 다르게 동작을 하는 특성을 말합니다. 예를 들어, 동일한 이름의 함수를 호출하더라도 매개변수에 따라 다른 함수가 실행되는 함수 중복(Function Overloading => 보통 오버로딩이라고 부름)도 다형성의 일종입니다. 상속 관계에서 함수 재정의(Function Overriding => 보통 오버라이딩이라고 부름)의도 다형성을 보여주는데, 함수의 이름과 매개변수가 같더라도 메시지를 보내는 객체의 타입에 따라 다른 동작이 가능하도록 허용합니다. 이러한 다형성은 매..

    다형성-상속에서의 형 변환

    다형성-상속에서의 형 변환

    1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이루어지는 문장입니다. int x = 10; double y = 10; // 자동 형 변환 int 형 자료가 double로 문제없이 복사되고 컴파일이나 실행에 문제가 없습니다. 만약 반대가 되면 어떨까? 다음 문장을 보면 double y = 3.14; int x = y; // 문제가 있는 형 변환 원인은 자료형의 크기와 관려이 있습니다. 보통 int는 4바이트 double은 8바이트를 사용하는데 4바이트로 8바이트를 표현하기에 부리가 있기 때문에 짤려서 나타납니다. 2. 포인터의 형 변환 포인터에서도 형 변환이 사용됩니다. 그전에 ..

    상속

    상속

    상속이란? 현실의 금수저가 부모에게 많은 재산을 물려받아 금방 안정된 생활을 누릴 수 있고, 이에 비해 흙수저는 물려받은 것이 거의 없어 모든 것을 자신이 노력해서 얻어야 합니다. 상속도 이와 비슷한 개념입니다. 기존에 어떤 클래스가 잘 만들어져 있으면 이를 상속받아 새로운 클래스를 만드는 것입니다. 이때, 상속을 해준 클래스를 부모(parent), 슈퍼(super), 기반(base) 클래스라고 합니다. 상속받아서 만든 새로운 클래스는 자식(child), 서브(sub), 파생(derived) 클래스라고 합니다. 만약 , 부모 클래스가 많은 기능을 갖고 있다면 이를 상속한 자식들은 많은 코드를 넣지 않아도 금방 강력한 기능을 가진 클래스가 됩니다. 금수저 클래스입니다. 이와 반대로 부모 클래스가 빈약하고,..

    누가 함수와 메서드의 차이를 물어보거든 이렇게 답하라

    누가 함수와 메서드의 차이를 물어보거든 이렇게 답하라

    보통 함수라고 부르는 function은 '이름으로 불려지는 특정 코드의 집합'을 의미합니다. 메서드라고 부르는 method는 '특정 객체에 포함된 이름으로 불려지는 특정 코드의 집합'이다. 간단하게 '멤버 함수' == '메서드' 라고 볼 수 있습니다. 함수가 메서드보다 더 큰 범위라고 할 수 있다. 앞으로 메서드는 객체에 포함된 멤버 함수를 바로 떠올리면 됩니다.

    .과 ->의 쓰는 용도

    .과 ->의 쓰는 용도

    둘 다 클래스의 멤버 함수와 멤버 변수에 접근한다는 의미는 동일합니다. 그러나. 연산자는 클래스 인스턴스 객체에 접근하고, ->연산자는 클래스 포인터 객체에 접근한다는 게 다릅니다. 이걸 보고 무슨 소리야 하겠지만 둘은 쓰는 용도의 차이가 명확하기 때문에 이 차이만 알면 쉽습니다. 결론은 동적 생성한 객체에 접근하려면 ->연산자, 아니면. 연산자를 쓴다고 생각하면 됩니다. 처음 프로그램을 시작할 때 미리 크기를 알 수 있으면 좋겠지만, 만약 예를 들어, 게임 플레이 중에 몬스터 나타나야 되거나 소멸되어야 하는 상황이면 프로그램 실행 중 생성되거나 소멸 되는 오브젝트들은 동적 생성하게 됩니다. 그러면 동적생성은 new 연산자로 만들어지는데 new 연산자는 객체의 주소 값을 반환해줍니다. 그렇기 때문에 포인..

    함수의 설계와 객체의 복사

    함수의 설계와 객체의 복사

    전 책에서 이 부분을 좋아합니다. 왜냐하면 이 책을 읽지 않았더라면 평생 모르고 생각하지도 않고 살았을 테니까요. 같은 기능의 함수라도 매개변수와 반환형을 다르게 할 수 있고 그거에 따른 복사 생성자와 대입 연산자 사용 횟수를 저는 절대 생각하고 깨닫지 못했을 거니까요. φ(◎ロ◎;)φ 여기 Complex 클래스가 정의돼있습니다. class Complex { double real, imag; // 복소수의 실수부와 허수부 public: Complex(double r = 0, double i = 0) : real(r), imag(i) { } //... }; void main() { Complex a(1,2), b(3,4), c; } 복소수 객체 a와 b를 더해 c에 저장하려고 합니다. 물론 계산 후 a와 ..

    얕은 복사와 깊은 복사

    얕은 복사와 깊은 복사

    얕은 복사는 컴파일러가 메모리 영역을 그대로 다른 객체의 메모리로 복사하는 식으로 작동합니다. 컴파일러는 클래스가 뭐하는지 뭘 가지고 있는지 관심도 없고 알지도 못합니다. 그저 클래스의 크기가 얼마인지 만 알고 있습니다. 정리하자면 어떤 크기의 메모리 영역을 복사하면 얕은 복사입니다. 2022.07.28 - [C++ 프로그래밍/클래스] - 객체의 복사와 복사 생성자 객체의 복사와 복사 생성자 같은 자료형의 변수들을 복사하는 것과 같이 객체도 서로 복사할 수 있습니다. 바로 대입연산자(=)와 복사생성자 두 가지의 이유로 복사할 수 있습니다. 대입연산자 이용 Point p(2,3), q; q = p; 복사 onesside-world.tistory.com 이 글에서 소개한 디폴트 대입 연산자와 디폴트 복사 생..

    객체의 복사와 복사 생성자

    객체의 복사와 복사 생성자

    같은 자료형의 변수들을 복사하는 것과 같이 객체도 서로 복사할 수 있습니다. 바로 대입연산자(=)와 복사생성자 두 가지의 이유로 복사할 수 있습니다. 대입연산자 이용 Point p(2,3), q; q = p; 복사생성자 이용 printPoint함수에서 매개변수로 객체를 전달하는 과정에 Point a가 p로 복사 생성자를 이용하여 객체 복사 readPoint함수에서 Point p 함수를 반환하면서 복사 생성자를 이용하여 객체 복사 #include using namespace std; struct Point { int x, y; Point(int xx = 0, int yy = 0) : x(xx), y(yy) { } }; Point readPoint() { Point p; cout > p.x >> p.y; r..