#230304 토~
명품 c++ 프로그래밍 8장 상속 실습문제!
1번
#include <iostream>
using namespace std;
class Circle{
protected:
int radius;
public:
Circle(int radius=0) {this->radius = radius;}
int getRadius(){return radius;}
void setRadius(int radius){this->radius=radius;}
double getArea(){return 3.14*radius*radius;}
};
class NamedCircle : public Circle{
string name;
public:
NamedCircle(int r, string name) : Circle(r) {
this->name=name;}
void show(){cout<<"반지름이"<<radius<<"인"<<name<<endl;}
};
int main(){
NamedCircle waffle(3, "waffle");
waffle.show();
}
2번
#include <iostream>
#include <string>
using namespace std;
class Circle{
protected:
int radius;
public:
Circle(int radius=0) {this->radius = radius;}
int getRadius(){return radius;}
void setRadius(int radius){this->radius=radius;}
double getArea(){return 3.14*radius*radius;}
};
class NamedCircle : public Circle{
string name;
public:
NamedCircle() : Circle(0){name="기본 피자";}
void setCircle(int r, string name)
{ radius = r; this->name=name;}
void show(){cout<<name;}
};
int main(){
NamedCircle pizza[3];
for(int i=0;i<3;i++){
cout<<i+1<<">> ";
string stmp;
int itmp;
cin>>itmp>>stmp;
pizza[i].setCircle(itmp,stmp);
}
int max = 0;
int maxidx = -1;
for(int i=0;i<3;i++){
if(pizza[i].getRadius() > max) max = pizza[i].getRadius(); maxidx = i;
cout<<max;
}
cout<<"가장 면적이 큰 피자는 ";
pizza[maxidx].show();
cout<<"입니다.";
}
홍대 스마트 코딩 문제
8. 가상 함수 오버라이딩 연습(2)
#include <iostream>
#include <string>
using namespace std;
class Person{
protected:
string name;
public:
Person(string n){name = n;}
virtual void printInfo(){cout<<name<<" 입니다.\n";}
};
class Student : public Person{
public:
Student(string n) : Person(n){};
void printInfo(){cout<<name<<"학생입니다.\n";}
};
class Teacher : public Person{
public:
Teacher(string n) : Person(n){};
void printInfo(){cout<<name<<"선생입니다.\n";}
};
int main(){
Person a("지민");
Student b("윤관");
Teacher c("영식");
Person *p;
p = &a; p->printInfo();
p = &b; p->printInfo();
p = &c; p->printInfo();
}
- 업캐스팅 활용
#include <iostream>
#include <string>
using namespace std;
class Person{
protected:
string name;
public:
Person(string n){name = n;}
virtual void printInfo(){cout<<name<<" 입니다.\n";}
};
class Student : public Person{
public:
Student(string n) : Person(n){};
void printInfo(){cout<<name<<"학생입니다.\n";}
};
class Teacher : public Person{
public:
Teacher(string n) : Person(n){};
void printInfo(){cout<<name<<"선생입니다.\n";}
};
int main(){
Person *p[5];
string s; int n;
for(int i=0;i<5;i++){
cout<<"이름 입력: ";
cin>>s;
cout<<"유형 입력";
cin>>n;
if(n==1) p[i] = new Person(s);
else if(n==2) p[i] = new Student(s);
else if(n==3) p[i] = new Teacher(s);
}
for(int i=0;i<5;i++){
p[i]->printInfo();
}
}
12. 계산기 클래스
#include <iostream>
using namespace std;
class Cal{
protected :
int a, b;
public :
void set(int x, int y){
a = x; b = y;
}
virtual int calculate()=0;
};
class Plus : public Cal{
public:
int calculate(){return a+b;}
};
class Minus : public Cal{
public:
int calculate(){return a-b;}
};
class Multiply : public Cal{
public:
int calculate(){return a*b;}
};
class Division : public Cal{
public:
int calculate(){return a/b;}
};
int main(){
Plus p; Minus m; Multiply mu; Division d;
Cal *cp = NULL;
int a, b;
char c;
while(1){
cout<<"식 입력: ";
cin>>a>>c>>b;
if(a==0 && b==0 && c=='0') break;
if(c=='+') cp = &p;
if(c=='-') cp = &m;
if(c=='*') cp = μ
if(c=='/') cp = &d;
cp->set(a, b);
cout<<"계산 결과는 "<<cp->calculate()<<"입니다.\n";
}
cout<<"프로그램을 종료합니다.";
}
14. 직원 관리 프로그램
#include <iostream>
#include <string>
using namespace std;
class LTWworker{
protected:
string name;
public:
LTWworker(string n) : name(n) {};
virtual void printInfo() = 0;
virtual int getWage() = 0;
};
class Employee : public LTWworker{
protected:
int wage;
public:
Employee(string n, int w) : LTWworker(n), wage(w) {};
void printInfo() {cout<<"사원 "<<name<<" "<<wage<<"만 원\n";}
int getWage(){return wage;}
};
class ExEmployee : public LTWworker{
protected:
int wage;
double bonus;
public:
ExEmployee(string n, int w, double b) : LTWworker(n), wage(w), bonus(b) {wage += wage*b;}
void printInfo() {cout<<"우수 "<<name<<" "<<wage<<"만 원\n";}
int getWage(){return wage;}
};
class Teacher : public LTWworker{
protected:
int t;
int wage;
public:
Teacher(string n, int t, int tw) : LTWworker(n), t(t) {wage = t*tw;}
void printInfo(){cout<<"선생님 "<<name<<" "<<wage<<"만 원\n";}
int getWage(){return wage;}
};
class workerManager{
LTWworker* larray[100];
int size;
public:
workerManager(){size=0;}
void addWorker(){
int Type;
cout<<"근무 유형 선택(1-사원 2-우수사원 3-선생님): ";
cin>>Type;
if(Type==1){
string n; int w;
cout<<"이름 월급 입력: ";
cin>>n>>w;
larray[size] = new Employee(n, w);
}
else if(Type==2){
string n; int w; double b;
cout<<"이름 월급 보너스비율 입력: ";
cin>>n>>w>>b;
larray[size] = new ExEmployee(n, w, b);
}
else if(Type==3){
string n; int h; int tw;
cout<<"이름 근무시간 시급 입력: ";
cin>>n>>h>>tw;
larray[size] = new Teacher(n, h, tw);
}
size++;
cout<<"등록 완료!\n";
}
void GetWorkersInfo(){
for(int i=0;i<size;i++){
larray[i]->printInfo();
}
}
void getTotalWage(){
int sum=0;
for(int i=0;i<size;i++){
sum+=larray[i]->getWage();
}
cout<<"직원 월급 총 합계: "<<sum<<"만 원\n";
}
};
int main(){
cout<<"=======================\n";
cout<<"1. 직원 추가\n";
cout<<"2. 전체 직원 정보 출력\n";
cout<<"3. 전체 직원의 월급 합 계산\n";
cout<<"4. 프로그램 종료\n";
cout<<"=======================\n";
workerManager wm;
int fn;
while(1){
cout<<"기능 선택: ";
cin>>fn;
if(fn==1) wm.addWorker();
if(fn==2) wm.GetWorkersInfo();
if(fn==3) wm.getTotalWage();
if(fn==4) break;
cout<<"\n";
}
cout<<"프로그램을 종료합니다.\n";
return 0;
}
17. 가상 소멸자 연습
#include <iostream>
#include <cstring>
using namespace std;
class Data{
protected:
int n;
public:
Data(int N) : n(N) {};
virtual void show()=0;
virtual ~Data(){};
};
class nameData : public Data{
char*name;
public:
nameData(int n, const char* str) : Data(n) {strcmp(str, name);}
void show(){
cout<<"데이터 이름 "<<name<<"\n";
cout<<"값: "<<n<<"\n";
}
~nameData(){delete[] name;};
};
int main(){
Data*p = new nameData(321, "San's birthday");
p->show();
delete p;
}
20. 다중 상속, 가상 상속 연습
#include <iostream>
using namespace std;
class data{
protected:
double a, b;
};
class Mul : virtual public data{
protected:
double mulF(){return a*b;}
};
class Div : virtual public data{
protected:
double divF(){return a/b;}
};
class calculator : public Mul, public Div{
char op;
public:
void input(){
cout<<"수식 입력: ";
cin>>a>>op>>b;
}
double calculate(){
if(op=='*') return mulF();
else return divF();
}
};
int main(){
calculator C;
C.input();
cout<< C.calculate();
}