반응형

분류 전체보기 429

다형성

베이스클래스 타입의 변수/참조/포인터가 파생클래스 타입의 객체를 저장/참조/포인팅 할 수 있습니다.  베이스타입의 변수에 파생클래스 타입의 객체를 치환할 수 있습니다.  다형성이란?베이스클래스 타입의 참조/포인터가 파생클래스 타입의 객체를 참조/포인팅 할 수 있는 것입니다. Computer 타입의 참조변수가 노트북 객체를 참조할 수 있따는 것입니다. 포인터가 노트북 객체를 포인터할 수 있는 것입니다.    동적 바인딩만약 computer 타입의 객체일 때 둘 중에 어떤 상황인지 컴파일은 알 수 가 없습니다. 동적바인딩은 코드를 실행하는 단계에서 실제로 가리키고 있는 객체가 뭔지에 따라서 그것의 메서드를 호출해준다는 것입니다. 이것이 virtual method이기 때문에 양쪽 둘 다 있기 때문에 가능한 것..

메서드 오버라이딩

오버라이딩이란?베이스 클래스가 가지고 있는 멤버 메스드를 Derived 클래스에서 새로운 함수로 덮어쓰는 것을 오버라이딩입니다. 즉 베이스 클래스에서 존재하는 메서드를 파생클래스에 재정의하는 것을 오버라이딩이라고 합니다.  베이스클래스의 오버라이딩할 메서드를 virtual로 선언virtual string toString() { ... return result;}파생클래스에 오버라이딩할 메서드를 다음과 같이 추가:string toString() override { string result = Computer::toString() + "\nScreen size: " + to_string(screenSize) + " inches" + "\nWeight: " + to_stri..

상속이란?

컴퓨터라는 클래스가 있다고 가정을 해봅시다. 그리고 노트북이라는 클래스를 만들고 싶을 때 일반적인 컴퓨터의 속성을 가지고 있을 것입니다. 유사성이 비슷한 두 클래스이지만 screen size와 weight같은 특수한 노트북의 속성들이 추가적으로 필요할 것입니다.  하지만 상속을 이용하면 더 간단하게 이용할 수 있습니다. 상속컴퓨터로부터 derived된 클래스라고 표현을 하며 컴퓨터는 base 클래스, 확장해서 만든 클래스를 derived 클래스라고 합니다. 이 관계는 is a relationship이라고 부릅니다. A notebook is a computer라고 부릅니다.   class Computer {public: string manufacturer; string processor; int ramSi..

차별성함수

두 개의 정점이 두어졌을 때 v = (p1, p2, p3) 를 가지고 있고 w = (q1, q2, q3)를 가지고 있을 때 v정점과 w정점의 특성이 있을 때 차별성 함수는 다음과 같이 계산을 할 수 있습니다.  차별성 함수 값은 v와 w 간의 차이를 나타내는 척도가 됩니다.  N이라는 값을 하나 고정을 시키는데 이 값을 고정시키고 나면 간선을 표기할 때 s(v,w)  두 정점 v와 w 사이의 간선이 있다라는 것은 같은 클래스에 속한다는 것입니다. 이는 두 프로그램은 같은 클래스로 정의될 수 있다는 것입니다.  완전그래프완전그래프 Kn은 n개의 정점을 가진 심플 그래프라고 볼 수 있습니다. 한가지 특징은 하나의 간선으로 모든 정점이 결합되는 것을 완전그래프라고 합니다. 즉 모든 정점이 하나의 간선으로 연결..

컴파일 과정

컴파일 단계에서 이해 #include using namespace std;class Foo;class Bar {public: Bar(); Bar(Foo f); Foo* bar_func(int x);};int some_func();int some_func2(Foo f);int main() { Bar b; Foo* p_foo = b.bar_func(10); int result = some_func(); return 0;}Foo 타입의 객체를 생성하거나 그런 부분은 없습니다. 컴파일 되기 위해서는 이름만 필요로 하기 때문에 컴파일 단계에선 forward declaration만으로 충분하다는 것입니다.  실제적인 정의는 다른 파일에 있을 것이라고 가정을 하는 것이빈다. 이것이 링커의 몫인 것입니다.  즉 cla..

복사생성자

변수 선언하면서 초기화할 때 이외에도 복사 생성자가 실행되는 경우값에 의한 호출로 매개변수를 전달할 때함수가 값에 의한 반환을 할 때배열 혹은 벡터의 원소들을 중괄호로 초기화할 때치환문에서 Deep copy 원한다면 = 오버로딩Bar& operator=(const Bar& t) { clearMembers(); ptr = new Foo(*t.ptr); for (auto& pt : t.vec) vec.push_back(new Foo(*pt)); return *this;}자신과 동일한 타입의 객체를 받으려면 const로 받아야 합니다. 이는 규칙으로 이해해주시면 됩니다.  private: void clearMembers() { delete ptr; for (auto p : vec) delete p; ..

객체의 복사와 삭제

#include #include #include #include using namespace std;class MyRectangle {public: MyPoint* lu; double width, height; MyRectangle() = default; MyRectangle(double x, double y, double w,double h): lu(new MyPoint(x, y)), width(w), height(h){}};MyRectangle r(1, 2, 3, 4);MyRectangle q = r;r.lu->x = 100;cout x c++에서 객체를 복사하면 멤버별 복사가 일어나빈다. 객체 r의 멤버 lu는 MyPoint객체의 주소이므로 그 주소가 객체 q의 멤버 lu로 복사고딥니다.  그 결..

다항식 계산기 (code12. cpp 수정

void add_term(int coef, int expo) { auto it = terms.begin(); while (it != terms.end() && (*it)->expo > expo) it++; if (it != terms.end() && (*it)->expo == expo) { (*it)->coef += coef; if ((*it)->coef == 0) { terms.erase(it); } else { terms.insert(it, new Term(coef, expo)); } }}이 경우에 erase 되지만 이것은 garbage가 됩니다. 삭제를 해주기 위해선 delete를 해주면 되는데요. 이 객체의 주소를 표현해야 하기 때문에delete *it;이렇게 해주면 garbag..

동적 생성 개체의 삭제와 쓰레기

동적 객체는 delete를 해줘야한다동적 생성된 객체는 명시적으로 delete를 해줘야 삭제가 됩니다. 다른 객체들은 그 객체의 scope를 벗어나면 자동 삭제되지만 동적 생성은 아닙니다.  그러므로 반드시 delete를 해주어야 하는데요. 동적 생성된 객체의 주소를 저장하는 포인터는 그 포인터 변수의 scope를 벗어나면 자동 삭제됩니다. 이 경우 동적 생성된 객체의 주소를 잃어버리게 됩니다. 이렇게 주소를 잃어버리고 삭제되지 않은 동적 객체를 쓰레기라고 부릅니다. 이 누적된 쓰레기는 프로그램의 성능을 저하시킵니다.  class MyPoint {public: double x, y; MyPoint() = default; MyPoint(double a, double b) : x(a), y(b) {}};in..

동적 객체 생성 new 연산자

지금까지 데이터는 항상 이름이 가진 객체에 저장을 하였습니다. 하지만 C++에서는 NEW 연산자로 이름이 없는 객체를 생성할 수 있습니다. 이름이 없으면 그 객체를 어떻게 사용할까요? NEW 연산자이름이 없는 대신 new 연산자는 생성된 객체의 주소를 반환합니다.그 주소를 포인터에 저장하여 간접참조를 통해 객체를 사용할 수 있습니다. 일반적으로 동적 생성된 객체는 메모리에서 힙이라고 부르는 영역에 저장됩니다. 동적으로 생성된 객체는 명시적으로 delete해주지 않으면 자동 삭제되지 않습니다. 해당 구조로 데이터가 컴퓨터에 저장되어 있습니다. Data section에는 전역변수들이 저장됩니다. 전역변수는 지역변수와는 달리 프로그램이 시작되는 시점에 데이터가 생성되고 완전히 종료될 때까지 유지하고 있는 변수..

반응형