일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- git
- TypeORM
- 해시
- 코딩테스트
- 프로그래머스
- 가상면접사례로배우는대규모시스템설계기초
- C언어
- nestJS
- 구조체배열
- Spring
- C++
- spring boot
- 파이썬
- 스프링
- OpenCV
- 카카오 알고리즘
- @Autowired
- 컴포넌트스캔
- nestjs auth
- 알고리즘
- AWS
- 시스템호출
- 카카오
- Nodejs
- @Component
- nestjs typeorm
- 코테
- thymeleaf
- python
- 카카오 코테
Archives
- Today
- Total
공부 기록장 💻
명품 C++ Programming 8장 실습 문제 - 클래스 상속, 기본 클래스, 파생 클래스, 객체 포인터, 접근 지정 본문
# Language & Tools/C++
명품 C++ Programming 8장 실습 문제 - 클래스 상속, 기본 클래스, 파생 클래스, 객체 포인터, 접근 지정
dream_for 2021. 5. 9. 02:01(명품 C++ 프로그래밍 8장)
1.
#include <iostream>
using namespace std;
class Circle{
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 radius=1, string name="circle"):Circle(radius){
this->name=name;
}
void show(){cout<<"반지름이 "<<getRadius()<<"인 "<<name<<endl;}
};
int main(){
NamedCircle waffle(3,"waffle");
waffle.show();
}
1, 2.
#include <iostream>
using namespace std;
class Circle{
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 radius=1, string name="circle"):Circle(radius){
this->name=name;
}
string getName(){return name; }
void setName(string name){this->name=name;}
void show(){cout<<"반지름이 "<<getRadius()<<"인 "<<name<<endl;}
};
int main(){
NamedCircle waffle(3,"waffle");
waffle.show();
NamedCircle pizza[5];
cout<<"5 개의 정수 반지름과 원의 이름을 입력하세요"<<endl;
int r;
string name;
for(int i=0;i<5;i++){
cout<<i+1<<">> ";
cin>>r>>name;
pizza[i].setRadius(r);
pizza[i].setName(name);
}
NamedCircle max_pizza=pizza[0];
for(int i=1;i<5;i++)
if(pizza[i].getRadius()>max_pizza.getRadius()) max_pizza=pizza[i];
cout<<"가장 면적이 큰 피자는 "<<max_pizza.getName()<<"입니다"<<endl;
}
3, 4.
#include <iostream>
using namespace std;
class Point{
int x,y;
public:
Point(int x, int y){this->x=x;this->y=y;}
int getX(){return x;}
int getY(){return y;}
protected:
void move(int x, int y){this->x=x;this->y=y;}
};
class ColorPoint:public Point{
string color;
public:
ColorPoint(int x=0, int y=0, string color="BLACK"):Point(x,y){this->color=color;}
void setPoint(int x, int y){move(x,y);}
void setColor(string color){this->color=color;}
void show(){cout << color<<"색으로 ("<<getX()<<","<<getY()<<")에 위치한 점입니다."<<endl;}
};
int main(){
ColorPoint zeroPoint;
zeroPoint.show();
ColorPoint cp(5,5,"RED");
cp.setPoint(10,20);
cp.setColor("BLUE");
cp.show();
}
5.
큐처럼 작동하는 MyQueue 클래스.
문제 조금 변형해봄
#include <iostream>
using namespace std;
class BaseArray{
private:
int capacity; // 배열의 크기
int *mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
BaseArray(int capacity=100){
this->capacity=capacity;
mem=new int[capacity];
}
~BaseArray(){delete []mem;}
void put(int index, int val){mem[index]=val;}
int get(int index){return mem[index];}
int getCapacity(){return capacity;}
};
class MyQueue : public BaseArray{
int front, rear;
public:
MyQueue(int capacity):BaseArray(capacity){front=0;rear=0;};
void enqueue(int n){
if(rear==getCapacity()) return;
put(rear++, n); // mem[size]=n;
}
int capacity(){ return getCapacity();}
int length(){return (rear-front);}
int dequeue(){
if(length()==0) exit(1);
return get(front++);}
};
int main(){
MyQueue mQ(5); // 5개의 정수를 저장할 수 있는 큐 생성
int size;
cout<<"큐에 몇 개의 정수를 삽입하시겠습니까? >> ";
cin>>size;
int n;
cout<<"큐에 삽입할 "<<size<<"개의 정수를 입력하라>> ";
for(int i=0;i<size;i++){
cin>>n;
mQ.enqueue(n); // 큐에 삽입
}
cout<<"큐의 용량: "<<mQ.capacity()<<", 큐의 크기: "<<mQ.length()<<endl;
cout<<"큐의 원소를 순서대로 몇 개 제거하시겠습니까? >> ";
cin>>size;
for(int i=0;i<size;i++)
cout<<mQ.dequeue()<<' ';
cout<<endl<<endl<<"큐의 현재 크기: "<<mQ.length()<<endl;
cout<<"남아있는 모든 원소를 제거합니다"<<endl;
while(mQ.length()!=0){cout<<mQ.dequeue()<<' ';}
cout<<endl<<"큐의 현재 크기: "<<mQ.length()<<endl;
}
6. 스택
#include <iostream>
using namespace std;
class BaseArray{
private:
int capacity; // 배열의 크기
int *mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
BaseArray(int capacity=100){
this->capacity=capacity;
mem=new int[capacity];
}
~BaseArray(){delete []mem;}
void put(int index, int val){mem[index]=val;}
int get(int index){return mem[index];}
int getCapacity(){return capacity;}
};
class MyStack:public BaseArray{
int top;
public:
MyStack(int capacity):BaseArray(capacity){top=0;}
void push(int n){
if(top==getCapacity()) return;
put(top++, n); // mem[size]=n;
}
int capacity(){ return getCapacity();}
int length(){return top;}
int pop(){
if(length()==0) exit(1);
return get(--top);}
};
int main(){
MyStack mStack(5); // 5개의 정수를 저장할 수 있는 큐 생성
int size;
cout<<"스택에 몇 개의 정수를 삽입하시겠습니까? >> ";
cin>>size;
int n;
cout<<"스택에 삽입할 "<<size<<"개의 정수를 입력하라>> ";
for(int i=0;i<size;i++){
cin>>n;
mStack.push(n); // 큐에 삽입
}
cout<<"스택의 용량: "<<mStack.capacity()<<", 스택의 크기: "<<mStack.length()<<endl;
cout<<"스의 원소를 몇 개 팝하시겠습니까? >> ";
cin>>size;
for(int i=0;i<size;i++)
cout<<mStack.pop()<<' ';
cout<<endl<<endl<<"스택의 현재 크기: "<<mStack.length()<<endl;
cout<<"남아있는 모든 원소를 팝합니다"<<endl;
while(mStack.length()!=0){cout<<mStack.pop()<<' ';}
cout<<endl<<"스택의 현재 크기: "<<mStack.length()<<endl;
}
7.
#include <iostream>
using namespace std;
class BaseMemory{
char *mem;
protected:
BaseMemory(int size){mem=new char[size];}
char getMem(int i){return mem[i];}
void putMem(int i, char ch){mem[i]=ch;}
};
class ROM:public BaseMemory{
int size;
public:
ROM(int capacity, char *arr, int len):BaseMemory(capacity){
size=0;
for(int i=0;i<len;i++)
putMem(size++, arr[i]);
}
char read(int i){return getMem(i);}
};
class RAM:public BaseMemory{
int size;
public:
RAM(int capacity):BaseMemory(capacity){size=0;}
void write(int i, char ch){ putMem(size++, ch);}
char read(int i){return getMem(i); }
};
int main(){
char x[5]={'h', 'e', 'l', 'l','o'};
ROM biosROM(1024*10, x, 5);
RAM mainMemory(1024*1024);
for(int i=0;i<5;i++) mainMemory.write(i, biosROM.read(i));
for(int i=0;i<5;i++) cout<<mainMemory.read(i);
}
8.
#include <iostream>
using namespace std;
class Printer{
protected:
string model, manufacturer;
int printedCount; // 인쇄 매수
int availableCount; // 인쇄 종이 잔량
public:
Printer(string name, string manu, int pages){
model=name;
manufacturer=manu;
availableCount=pages;
printedCount=0;
}
void print(int pages){ // pages 매의 용지를 사용 턴
availableCount-=pages;
printedCount+=pages;
}
string getName(){return model;}
string getManu(){return manufacturer;}
int getPages(){return availableCount;} // 남은 잔량 리
};
class InkJetPrinter:public Printer{
int availableInk;
public:
InkJetPrinter(string name, string manu, int pages, int ink):Printer(name, manu,pages){
model=name;
manufacturer=manu;
availableCount=pages;
availableInk=ink;
printedCount=0;
}
void printInkJet(int pages){
availableInk-=pages; // 잉크
availableCount-=pages; // 매수
printedCount+=pages;
}
int getInk(){return availableInk;}
void printInkJetPrinter(){
cout<<"잉크젯 : "<<getName()<<", "<<getManu()<<", "<<"남은 종이 "<<getPages()<<", 남은 잉크: "<<getInk()<<endl;
}
};
class LaserPrinter:public Printer{
int availableToner;
public:
LaserPrinter(string name, string manu, int pages, int toner):Printer(name, manu,pages){
model=name;
manufacturer=manu;
availableCount=pages;
availableToner=toner;
}
void printLaser(int pages){
availableToner-=pages; // 토너
availableCount-=pages; // 매수
printedCount+=pages;
}
int getToner(){return availableToner;}
void printLaserPrinter(){
cout<<"레이저 : "<<getName()<<", "<<getManu()<<", "<<"남은 종이 "<<getPages()<<", 남은 토너: "<<getToner()<<endl;
}
};
int main(){
InkJetPrinter *Ink=new InkJetPrinter("Officejet V40", "HP", 5, 10);
LaserPrinter *Laser=new LaserPrinter("SCX-6x45", "삼성전자", 3, 20);
cout<<"현재 작동중인 2 대의 프린터는 아래와 같다"<<endl;
Ink->printInkJetPrinter();
Laser->printLaserPrinter();
char keep;
do{
int choice, n;
cout<<endl<<endl<<"프린터(1: 잉크젯, 2:레이저)와 매수 입력>> ";
cin>>choice>>n;
if(choice==1){
if(n>Ink->getInk() || n>Ink->getPages()){
cout<<"용지가 부족하여 프린트할 수 없습니다"<<endl;
}
else{
Ink->printInkJet(n);
cout<<n<<"장 성공적으로 프린트하였습니다"<<endl;
}
}
else if(choice==2){
if(n>Laser->getToner() || n>Laser->getPages()){
cout<<"용지가 부족하여 프린트할 수 없습니다"<<endl;
}
else{
Laser->printLaser(n);
cout<<n<<"장 성공적으로 프린트하였습니다"<<endl;
}
}
Ink->printInkJetPrinter();
Laser->printLaserPrinter();
cout<<endl<<"계속 프린트하시겠습니까(y/n)>>";
cin>>keep;
}while(keep=='y');
delete []Ink;
delete []Laser;
}
728x90
반응형
'# Language & Tools > C++' 카테고리의 다른 글
Comments