STUDY BLOG
명품 C++ programming Chapter 09 예제 본문
명품 C++ programming Chapter 09 예제
예제 9-1 파생 클래스에서 함수를 재정의하는 사례
#include <iostream>
using namespace std;
class Base {
public:
void f() { cout << "Base::f() called << endl; }
};
class Derived : public Base {
public:
void f() { cout << "Derived::f() called" << endl; }
};
void main() {
Derived d, *pDer;
pDer = &d;
pDer -> f();
Base* pBase;
pBase = pDer;
pBase->f();
}
예제 9-2 오버라이딩과 가상 함수 호출
#include <iostream>
using namespace std;
class Base {
public:
virtual void f() { cout << "Base::f() called << endl; }
};
class Derived : public Base {
public:
virtual void f() { cout << "Derived::f() called" << endl; }
};
void main() {
Derived d, *pDer;
pDer = &d;
pDer -> f();
Base* pBase;
pBase = pDer;
pBase->f();
}
예제 9-3 상속이 반복되는경우 가상 함수 호출
#include <iostream>
using namespace std;
class Base {
public:
virtual void f() { cout << "Base::f() called << endl; }
};
class Derived : public Base {
public:
void f() { cout << "Derived::f() called" << endl; }
};
class GrandDerived : public Derived {
public:
void f() { cout << "GrandDerived::f() called" << endl; }
};
void main() {
GrandDerived g;
Base *bp;
Derived *dp;
GrandDerived *gp;
bp = dp = gp = &g;
bp->f();
dp->f();
gp->f();
}
예제 9-5 소멸자를 가상 함수로 선언
#include <iostream>
using namespace std;
class Base {
public:
virtual ~Base() { cout << "~Base()" << endl; }
};
class Derived: public Basd {
public:
virtual ~Derived() { cout << "~Derived()" << endl; }
};
int main() {
Derived *dp = new Derived();
Base *bp = new Derived();
delete dp;
delete bp;
}
예제 9-6 추상 클래스 구현 연습
#include <iostream>
using namespace std;
class Calculator {
public:
virtual int add(int a, int b) = 0;
virtual int substract(int a, int b)=0;
virtual double average(int a[], int size) =0;
};
class CoodClac : public Calculator {
public:
int add(int a, int b) { return a+b; }
int subtract(int a, int b) { return a-b; }
double average(int a[], int size) {
double sum=0;
for(int i=0; i<size; i++)
sum += a[i];
return sum/size;
}
};
int main() {
int a[] = {1,2,3,4,5};
Calculator *p = new GoodClac();
cout << p->add(2,3) << endl;
cout << p->subtract(2,3) << endl;
cout << p->average(a,5) << endl;
delete p;
}
예제 9-7 추상 클래스를 상속받는 파생 클래스 구현 연습
#include <iostream>
using namespace std;
class Calculator {
void input() {
cout << "정수 2개를 입력하세요>> ";
cin >> a >> b;
}
protected:
int a, b;
virtual int calc(int a, int b) =0;
public:
void run() {
input();
cout << "계산된 값은 " << clac(a,b) << endl;
}
};
class Adder: public Calculator {
protected:
int clac(int a, int b) {
return a+b;
}
};
class Subtractor: public Calculator {
protected:
int clac(int a, int b) {
return a-b;
}
};
int main() {
Adder adder;
Substractor substractor;
adder.run();
subtractor.run();
}
'Software > C++' 카테고리의 다른 글
명품 C++ programming Chapter 08 예제 (0) | 2020.11.30 |
---|---|
명품 C++ programming Chapter 07 예제 (0) | 2020.11.25 |
명품 C++ programming Chapter 06 예제 (0) | 2020.11.22 |
명품 C++ programming Chapter 05 예제 (0) | 2020.11.20 |
명품 C++ programming Chapter 04 예제 (1) | 2020.11.02 |