일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AWS
- python
- Nodejs
- 코딩테스트
- C언어
- 프로그래머스
- 코테
- git
- 가상면접사례로배우는대규모시스템설계기초
- nestJS
- 알고리즘
- 스프링
- 구조체배열
- 카카오 코테
- @Autowired
- spring boot
- 파이썬
- 컴포넌트스캔
- 카카오 알고리즘
- @Component
- TypeORM
- 카카오
- nestjs typeorm
- 해시
- Spring
- thymeleaf
- OpenCV
- C++
- nestjs auth
- 시스템호출
Archives
- Today
- Total
공부 기록장 💻
[C++] 명품 C++ Programming 9장 실습 문제 본문
명품 C++ 프로그래밍 9장 실습 문제
1.
#include <iostream>
using namespace std;
class Converter{
protected:
double ratio;
virtual double convert(double src)=0; // src를 다른 단위로 변환
virtual string getSourceString()=0; // src 단위 명칭
virtual string getDestString()=0; // dest 단위 명칭
public:
Converter(double ratio){this->ratio=ratio;}
void run(){
double src;
cout<<getSourceString()<<"을 "<<getDestString()<<"로 바꿉니다. ";
cout<<getSourceString()<<"을 입력하세요>> ";
cin>>src;
cout<<"변환 결과 : "<<convert(src)<<getDestString()<<endl;
}
};
class WonToDollar:public Converter{
public:
WonToDollar(double ratio):Converter(ratio){ };
virtual double convert(double src){ // src를 다른 단위로 변환
return src/ratio;}
virtual string getSourceString(){ // src 단위 명칭
return "원";
}
virtual string getDestString(){ // dest 단위 명칭
return "달러";
}
};
int main(){
WonToDollar wd(1010); // 1달러에 1010원(ratio)
wd.run();
}
2.
class KmToMile:public Converter{
public:
KmToMile(double ratio):Converter(ratio){};
virtual double convert(double src){ // src를 다른 단위로 변환
return src/ratio;}
virtual string getSourceString(){ // src 단위 명칭
return "Km";
}
virtual string getDestString(){ // dest 단위 명칭
return "Mile";
}
};
int main(){
KmToMile toMile(1.6093441010); // 1 mile = 1.609344 Km
toMile.run();
}
3.
#include <iostream>
using namespace std;
// 추상 클래스
class LoopAdder{
string name;
int x,y,sum;
void read(); // x, y를 읽어들임
void write(); // sum을 출력
protected:
LoopAdder(string name=""){this->name=name;}
int getX(){return x;} int getY(){return y;}
virtual int calculate()=0; // 순수 가상 함수 - 루프를 돌며 합을 구하는 함수
public:
void run();
};
void LoopAdder::read(){
cout<<name<<":"<<endl;
cout<<"처음 수에서 두번째 수까지 더합니다. 두 수를 입력하세요 >> ";
cin>>x>>y;
}
void LoopAdder::write(){cout<<x<<"에서 "<<y<<"까지의 합 = "<<sum<<" 입니다"<<endl;}
void LoopAdder::run(){
read(); // x, y를 읽음
sum=calculate(); // 루프 돌며 게산
write(); // 결과 sum 출력
}
class ForLoopAdder:public LoopAdder{
public:
ForLoopAdder(string name=""):LoopAdder(name){};
int calculate(){
int sum=0;
for(int i=getX();i<=getY();i++) sum+=i;
return sum;
}
};
int main(){
ForLoopAdder forLoop("For Loop");
forLoop.run();
}
4.
class WhileLoopAdder:public LoopAdder{
public:
WhileLoopAdder(string name=""):LoopAdder(name){};
int calculate(){
int i=getX(), sum=0;
while(i<=getY()){
sum+=i++;
}
return sum;
}
};
class DoWhileLoopAdder:public LoopAdder{
public:
DoWhileLoopAdder(string name=""):LoopAdder(name){};
int calculate(){
int i=getX(), sum=0;
do{
sum+=i++;
}while(i<=getY());
return sum;
}
};
int main(){
ForLoopAdder forLoop("For Loop");
forLoop.run();
WhileLoopAdder whileLoop("While Loop");
whileLoop.run();
DoWhileLoopAdder doWhileLoop("Do While Loop");
doWhileLoop.run();
}
5.
#include <iostream>
using namespace std;
class AbstractGate{
protected:
bool x,y;
public:
void set(bool x, bool y){this->x=x;this->y=y;}
virtual bool operation()=0;
};
class ANDGate:public AbstractGate{
public:
bool operation(){ return x&y;}
};
class ORGate:public AbstractGate{
public:
bool operation(){ return x|y;}
};
class XORGate:public AbstractGate{
public:
bool operation(){ return x^y;}
};
int main(){
ANDGate andGate;
ORGate orGate;
XORGate xorGate;
andGate.set(true, false);
orGate.set(true, false);
xorGate.set(true, false);
cout.setf(ios::boolalpha); // 불린 값을 문자열 형태로 "true", "false"로 출력
cout<< andGate.operation() << endl;
cout<< orGate.operation() << endl;
cout<< xorGate.operation() << endl;
}
6.
#include <iostream>
using namespace std;
class AbstractStack{
protected:
public:
virtual bool push(int n)=0; // 스택에 n push하고 스택이 full이면 false return
virtual bool pop(int& n)=0; // 스택에서 정수를 n에 저장하고 스택이 empty면 false return
virtual int size()=0; // 현재 스택에 저장된 정수 리턴
};
class IntStack:public AbstractStack{
int top; // 스택의 상단
int capacity; // 전체 용량
int *mem; // 동적 메모리 할당받을 포인터
public:
IntStack(int capacity){
this->capacity=capacity;
top=0;
mem=new int[capacity];
}
~IntStack(){
if(mem) delete []mem;
}
bool push(int n){
if(top==capacity) return false;
mem[top++]=n;
return true;
}
bool pop(int& n){
if(top==0) return false;
n=mem[--top];
return true;
}
int size(){return top;}
};
int main(){
IntStack intStack(3); // 5개의 요소를 저장할 수 있는 스택 생성
for(int i=0;i<5;i++){
if(intStack.push(i)) cout<<"스택에 "<<i<<" push, 스택의 요소 개수 : "<<intStack.size()<<endl;
else{
cout<<"스택 포화"<<endl<<endl;;
break;
}
}
int data;
for(int i=0;i<5;i++){
if(intStack.pop(data)) cout<<"스택에서 "<<data<<" pop, 스택의 요소 개수 : "<<intStack.size()<<endl;
else{
cout<<"스택 공백"<<endl;
break;
}
}
}
7.
#include <iostream>
using namespace std;
class Shape{
protected:
string name;
int width, height; // 도형이 내접하는 사각형의 너비와 높이
public:
Shape(string n="", int w=0, int h=0){name=n;width=w;height=h;}
virtual double getArea(){return 0;}; // dummy 값 리턴
string getName(){return name;}
};
class Oval:public Shape{
public:
Oval(string n="", int w=0, int h=0):Shape(n,w,h){}
double getArea(){return 3.14*width*height;}
};
class Rect:public Shape{
public:
Rect(string n="", int w=0, int h=0):Shape(n,w,h){}
double getArea(){return width*height;}
};
class Triangular:public Shape{
public:
Triangular(string n="", int w=0, int h=0):Shape(n,w,h){}
double getArea(){return 0.5*width*height;}
};
int main(){
Shape *p[3];
p[0]=new Oval("빈대떡", 10,20);
p[1]=new Rect("찰떡", 30, 40);
p[2]=new Triangular("토스트", 30, 40);
for(int i=0;i<3;i++)
cout<<p[i]->getName()<<" 넓이는 "<<p[i]->getArea()<<endl;
for(int i=0;i<3;i++)
delete p[i];
}
8.
추상 클래스로, 함수는 순수 가상 함수로
class Shape{
protected:
string name;
int width, height; // 도형이 내접하는 사각형의 너비와 높이
public:
Shape(string n="", int w=0, int h=0){name=n;width=w;height=h;}
virtual double getArea()=0; // 순수 가상 함수
string getName(){return name;}
};
virtual double getArea()=0; 으로 변경
728x90
반응형
'# Language & Tools > C++' 카테고리의 다른 글
Comments