Language

· Language/C++
비 가상 소멸자 // Animal.hpp class Animal { public: ~Animal(); private: int mAge; }; // Cat.hpp class Cat : public Animal { public: ~Cat(); private: char *mName; }; Cat myCat = new Cat(2, "Coco"); delete myCat; Animal yourCat = new Cat(4, "Mocha"); delete yourCat; 정적 바인딩의 경우 메모리 누수의 문제가 생긴다. 기본 클래스의 소멸자만 호출되므로 동적 할당된 메모리가 완전히 해제되지 않는다. 가상 소멸자 // Animal.hpp class Animal { public: virtual ~Animal(); pri..
· Language/C++
다형성 사전 지식 멤버 함수 멤버 함수는 어디에 있는가? 멤버 함수는 클래스의 코드 섹션에 위치하며, 모든 클래스 객체가 공유한다. 각 개체마다 멤버 함수의 메모리가 잡혀있는가? myCat->getName(); // "Coco" yourCat->getName(); // "Mocha" 함수의 동작은 완전히 일치하며, 매개변수로 받아도 된다. 저수준에서는 멤버 함수는 전역 함수와 크게 다르지 않다. 컴파일 시에 딱 한 번 메모리에 할당된다 (code section). 함수 오버라이딩 덮어쓰기 함수 정의가 같지만, 구현이 각 클래스마다 다른 것. 정적 바인딩 - 멤버 변수 선언된 클래스에 따라서 접근하는 코드 섹션을 구분한다. 동적 바인딩 - 가상 멤버 함수 // Animal.hpp class Animal {..
· Language/C++
상속 예제 // Animal.hpp class Animal { public: Animal(int age); ~Animal(); // 소멸자 추가 private: int mAge; }; // Cat.hpp class Cat : public Animal { public: Cat(int age, const char* name); ~Cat(); // 소멸자 추가 private: char* mName; }; // Cat.cpp Cat::Cat(int age, const char* name) : Animal(age) { size_t size = strlen(name) + 1; mName = new char[size]; strcpy(mName, name); } Cat::~Cat() { delete[] mName; /..
· Language/C++
const를 사용하는 이유 멤버 변수의 값이 바뀌는 것을 방지한다. 객체가 상수화되어 있으면 해당 객체의 멤버 변수를 변경할 수 없으므로 안전성을 제공한다. 최대한 많은 곳에 const를 붙여야 한다. 코드를 읽는 사람에게 해당 변수나 함수의 의도를 명확히 전달하고, 컴파일러에게 잠재적인 오류를 찾아내도록 돕는다. Local 변수에도 그렇게 해야한다. 함수 내에서 값이 변경되지 않는 변수에 const를 사용하면 함수의 의도를 명확히 하고, 컴파일러가 불필요한 변경을 방지할 수 있다. Vector를 더하는 a + b의 경우 Vector operator+(const Vector& rhs) const; a와 b Vector는 더하려는 값일 뿐 변해서는 안된다. 연산자 오버로딩과 const Vector oper..
· Language/C++
연산자 함수처럼 작동하는 부호 int result = num1 + num2; if (num1 < num2) {} if (IsNumber() || IsAlph()) {} num1++; num1 += 1; 연산자의 종류 단항 연산자 ! & ~ * + ++ - -- 변환 연산자 등 if (!IsNumber()) {} Vector& vRef = vector1; // 레퍼런스는 단항 연산자가 아니다. int hexNum = 0xFF00; int inversion = ~hexNum; int *number1 = &number; // 주소를 불러오는 건 단항 연산자이다. *number1 = 10; int number2 = +10; int number3 = -10; ++num1; num1--; --num1; num1--..
· Language/C++
메서드 오버로딩 class X { public: void Print(int score); void Print(const char * name); void Print(float gpa, const char *name); }; 메서드 오버로딩은 같은 이름의 메서드에 대해 다양한 매개변수를 가질 수 있도록 하는 기능이다. 불러오는 매개변수에 따라 어떤 메서드가 호출될지 결정된다. 함수 오버로딩 함수 오버로딩은 같은 이름의 함수에 대해 다양한 매개변수를 가질 수 있도록 하는 기능이다. 매개변수 목록을 제외하고는 동일한 이름의 함수이며, 반환형이 다르더라도 상관없다. 위의 코드에서 int Print(int score)는 오류가 발생한다. 함수 오버로딩은 매개변수의 타입, 순서, 개수를 고려하여 매칭을 수행하는데,..
· Language/C++
복사 생성자 인스턴스의 사본을 만드는 것. 만약 들고 있는 것이 레퍼런스라면, 레퍼런스의 주소값을 복사해줄 것인지의 문제가 있다. // Vector.h class Vector { public: Vector(const Vector& other); private: int mX; int mY; }; // Vector.cpp Vector::Vector(const Vector& other) : mX(other.mX) , mY(other.mY) // private 이지만, 같은 class 이기 때문에 접근 가능하다. { } 같은 클래스의 다른 개체를 이용하여 새로운 개체를 초기화하는 것은 다음과 같다. Vector(const Vector& other); Vector a; // default constructor 또..
coco_daddy
'Language' 카테고리의 글 목록 (3 Page)