본문 바로가기

분류 전체보기24

[C++] 추상 클래스 추상 클래스(Abstract class)는 순수 가상 함수가 하나 이상 있는 Class를 말한다. class Shape { public: virtual void draw() = 0; }; class Rect : public Shape { public: void draw() override { } }; int main() { Shape s; // error Shape* p; Rect r; } 위 예시에서 class Shape 같은 경우가 추상 클래스라고 볼 수 있다. 추상클래스는 직접 객체를 생성할 수 없는데, 그 이유는 추상클래스는 구현이 완벽하지 않기 때문이다. 순수 가상함수처럼 -> 구현을 파생 클래스가 할 수 있도록 지시하는 역할을 하지, 그 자체로서 구현이 있지는 않기 때문이다. 추상 클래스는 P.. 2023. 11. 29.
[C++] 가상 함수 함수는 함순데 가상함수가 뭐야 ?? Virtual Function ?? #include class Animal { public: void cry1() { std::cout cry2 => Compiler가 cry2 함수를 보니 뭐야?? 얘 virtual 함수네?? 지금 내가 결정할 수 없겠는데? 라고 판단을 하고 Runtime에서 실제 p가 가르키는 객체가 뭔지 판단을 한다. [Compile Time] "?? 얘 Virtual이네 내가 판단할 수 없어" [RunTime] "OK~ p 따라가서 cry2 함수 보니까 virtual이네?? 그럼 얘 객체가 누군지 확인해야겠는데..." "가상함수 테이블 보니까 얘 Dog 객체네 -> Dog로 넘어가서 cry2 함수 실행" 만약 Dog가 cry2 함수를 따로 구현하.. 2023. 11. 28.
[c++] Upcasting class Animal { public: int age; }; class Dog : public Animal { public: int color; }; int main() { Dog d; Dog* p1 = &d; Animal* p3 = &d; p3->age = 10; static_cast(p3)->color = 10; } "Animal" 클래스는 age라는 public 멤버 변수를 가지고 있습니다. "Dog" 클래스는 Animal 클래스를 public으로 상속받고 있습니다. 따라서 Dog 클래스는 Animal 클래스의 age 멤버 변수를 상속받고, 추가로 color라는 public 멤버 변수를 가지고 있습니다. Dog 객체 d를 만들고, d의 pointer p1에 d(Dog 객체)의 주소 값을 입력해준다.. 2023. 11. 28.
c++ 생성자 우선 예시 코드부터 살펴보자. #include #include class Person { std::string name; int age; public: Person(const std::string& name, int age) : name(name), age(age){} }; class Student : public Person { int id; public: Student(const std::string& name, int age, int id) :Person(name, age), id(id){} }; int main() { Student s("kim", 28, 15); Person p1("kim", 28); } Class Person은 string name과, int age 2가지의 멤버 변수를 가진다.. 2023. 11. 28.