#include <iostream>
using namespace std;
class Base {
public:
virtual void f() {
cout << "Base f()" << endl;
}
};
class Derived : public Base {
public:
virtual void f() {
cout << "Derived::f() called" << endl;
}
};
int main() {
Base b;
Base *bp;
bp = &b;
bp->f();
Derived d;
Derived* dp;
dp = &d;
dp->f();
bp = &d; //upcasting
bp->f();
}
C++
복사
#include <iostream>
using namespace std;
class Shape {
public:
void paint();
virtual void draw() = 0;
// 순수 가상함수
};
class Circle : public Shape {
public:
void draw();
};
class Line : public Shape {
public:
void draw();
};
class Rect : public Shape {
public:
void draw();
};
void Shape::paint() {
draw();
}
/*
void Shape::draw() {
cout << "Shape::draw()" << endl;
}
*/ // 여기를 할 필요 없다
void Circle::draw() {
cout << "원 그리기" << endl;
}
void Line::draw() {
cout << "선 그리기" << endl;
}
void Rect::draw() {
cout << "사각형 그리기" << endl;
}
int main() {
Shape* paintPad[100];
paintPad[0] = new Line();
paintPad[1] = new Rect();
paintPad[2] = new Line();
paintPad[3] = new Circle();
paintPad[4] = new Circle();
int count = 5;
for (int i = 0; i < count; i++) {
paintPad[i]->paint();
}
}
C++
복사