일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TypeORM
- spring boot
- 코딩테스트
- 프로그래머스
- 카카오
- OpenCV
- 컴포넌트스캔
- nestJS
- 카카오 알고리즘
- C언어
- @Component
- 해시
- 코테
- git
- 가상면접사례로배우는대규모시스템설계기초
- 카카오 코테
- nestjs typeorm
- thymeleaf
- 구조체배열
- @Autowired
- nestjs auth
- C++
- 스프링
- AWS
- 파이썬
- python
- 알고리즘
- Nodejs
- 시스템호출
- Spring
- Today
- Total
공부 기록장 💻
명품 C++ Programming 3장 실습 문제 - 클래스, 객체, 생성자, 소멸자, 인라인 함수 본문
명품 C++ Programming 3장 실습 문제 - 클래스, 객체, 생성자, 소멸자, 인라인 함수
dream_for 2021. 4. 20. 01:47(명품 C++ 프로그래밍 3장 )
1.
#include <iostream>
using namespace std;
class Tower {
int height;
public:
Tower():Tower(1) {}
Tower(int h) { height = h; }
int getHeight() { return height; }
};
int main() {
Tower myTower;
Tower seoulTower(100);
cout<<"높이는 "<<myTower.getHeight()<<"미터"<<endl;
cout << "높이는 " << seoulTower.getHeight() << "미터" << endl;
}
2.
<string> 헤더 파일의 find 함수와 substr 함수 사용하기
1. int find(const string& str, int pos); 문자열의 pos 위치에서부터 str을 탐색하여 발견한 처음 인덱스 반환
2. string substr(int pos); 문자열의 pos 위치에서부터 문자열을 새로운 서브스트링으로 생성하여 반환
3. int stoi(string s); 정수로 시작하는 문자열 s가 정수가 아닌 값이 나올 때 까지의 문자열을 정수형으로 변환
Date::Date(string date) {
year=stoi(date); // 전달받은 date 스트링 객체를 정수가 아닌 문자가 나올때까지의 문자열을 정수로 변환
int n = date.find('/'); // date 스트링에서 '/' 문자가 처음 나온 인덱스를 n에 저장
this->month = stoi(date.substr(n + 1)); // month에 n+1부터 끝까지 서브스트링으로 저장하고 이를 정수로 변환하여 저장
n = date.find('/', n + 1); // n+1 부터 다시 '/' 문자가 나온 처음 인덱스를 n에 저장
this->day = stoi(date.substr(n + 1)); // date의 n+1부터 끝까지 서브스트링으로 변환 후 정수로 변환하여 day에 저장
}
전체 코드:
#include <iostream>
#include <string>
using namespace std;
class Date {
int year;
int month;
int day;
public:
Date(string date);
Date(int y, int m, int d) { year = y;month = m;day = d; }
void show() { cout << year << "년 " << month << "월 " << day << "일" << endl; }
int getYear() { return year; }
int getMonth() { return month; }
int getDay() { return day; }
};
Date::Date(string date) {
year=stoi(date);
int n = date.find('/');
this->month = stoi(date.substr(n + 1));
n = date.find('/', n + 1);
this->day = stoi(date.substr(n + 1));
}
int main() {
Date birth(2014, 3, 20);
Date independenceDay("1945/8/15");
independenceDay.show();
cout << birth.getYear() << ',' << birth.getMonth() << ',' << birth.getDay() << endl;
}
결과:
3.
nclude <iostream>
using namespace std;
class Accout {
string name;
int id, balance;
public:
Accout(string n, int i, int m) { name = n;id = i;balance = m; }
string getOwner() { return name; }
void deposit(int m) { balance += m; }
int withdraw(int m) { balance -= m;return m; }
int inquiry() { return balance; }
};
int main() {
Accout a("kitae", 1, 5000);
a.deposit(50000);
cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
int money = a.withdraw(20000);
cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
}
5.
<cstdlib>, <ctime> 헤더 파일 이용하여 랜덤 난수 생성
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class Random {
public:
Random() {}
int next() { return rand() % RAND_MAX; }
int nextInRange(int s, int e) { return rand() % ( e - s + 1) + s; }
};
int main() {
Random r;
srand((unsigned)time(NULL));
cout << "-- 0 에서 " << RAND_MAX << "까지의 랜덤 정수 10 개--" << endl;
for (int i = 0;i < 10;i++) {
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 2에서 " << "4까지의 랜덤 정수 10 개 -- " << endl;
for (int i = 0;i < 10;i++) {
int n = r.nextInRange(2, 4);
cout << n << ' ';
}
}
6.
랜덤 짝수 정수 생성하는 EvenRandom 클래스 구현
int EvenRandom::nextInRange(int s, int e) {
int n;
do {
n = rand() % (e - s + 1) + s;
} while (n % 2);
return n;
}
생성하고자 하는 랜덤 정수의 범위를 정하기 위해서는,
범위 내에 생성될 수 있는 정수의 개수를 (e-s+1)로, 그리고 정수의 범위가 시작되는 s를 더하면 된다.
예를 들어, 5부터 20까지의 범위 내에서 짝수 정수 난수를 생성한다고 할 때,
5부터 20까지의 개수는 총 (20 - 5 +1) 16개이다.
그리고 5라는 수부터 시작되어야 하므로, s의 값인 5를 더해주는 것이다.
인수로 전달된 s와 e 모두 짝수인 경우, 예를 들어 6과 10이라면,
6,7,8,9,10 총 5개의 난수(10-6+1)가 생성될 수 있으며
6이라는 수부터 난수가 생성되어야 한다.
따라서 rand()%5 + 6 으로 인해 생성될 수 있는 난수는 {0,1,2,3,4} 집합에 각각 6을 더해준 {6,7,8,9,10} 이다.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// 클래스 선언부
class EvenRandom {
public:
EvenRandom() {}
int next();
int nextInRange(int s, int e);
};
// 클래스 구현부
int EvenRandom::next() {
int n;
do {
n = rand() % RAND_MAX;
} while (n % 2); // n%2가 0이 아닌 경우(==홀수인경우) 계속 반복 실행
return n;
}
int EvenRandom::nextInRange(int s, int e) {
int n;
do {
n = rand() % (e - s + 1) + s;
} while (n % 2);
return n;
}
int main() {
srand((unsigned)time(NULL));
EvenRandom r;
cout << "-- 0 에서 " << RAND_MAX << "까지의 랜덤 짝수 정수 10 개--" << endl;
for (int i = 0;i < 10;i++) {
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 2에서 " << "4까지의 랜덤 짝수 정수 10 개 -- " << endl;
for (int i = 0;i < 10;i++) {
int n = r.nextInRange(2, 4);
cout << n << ' ';
}
}
7.
위에서 do ~ while문에서의 조건문만 바꾸면 홀수 난수를 생성하는 OddRandom 을 구현할 수 있다.
#include <ctime>
using namespace std;
class OddRandom {
public:
OddRandom() {}
int next();
int nextInRange(int s, int e);
};
int OddRandom::next() {
int n;
do {
n = rand() % RAND_MAX;
} while (n % 2==0); // n%2가 0이 아닌 경우(==홀수인경우) 계속 반복 실행
return n;
}
int OddRandom::nextInRange(int s, int e) {
int n;
do {
n = rand() % (e - s + 1) + s;
} while (n % 2==0);
return n;
}
int main() {
srand((unsigned)time(NULL));
OddRandom r;
cout << "-- 0 에서 " << RAND_MAX << "까지의 랜덤 홀수 정수 10 개--" << endl;
for (int i = 0;i < 10;i++) {
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 5에서 " << "20까지의 랜덤 홀수 정수 10 개 -- " << endl;
for (int i = 0;i < 10;i++) {
int n = r.nextInRange(5,20);
cout << n << ' ';
}
cout << endl;
}
10.
계산기 프로그램
main.cpp
#include <iostream>
#include <string>
using namespace std;
#include "calculator.h"
int main() {
int x, y;
char op;
Add a;
Sub s;
Mul m;
Div d;
while(1)
{
cout << "두 정수와 연산자를 입력하세요 >>";
cin >> x >> y >> op;
switch (op) {
case '+':
a.setValue(x, y);
cout << a.calculate() << endl << endl;
break;
case '-':
s.setValue(x, y);
cout << s.calculate() << endl << endl;
break;
case '*':
m.setValue(x, y);
cout << m.calculate() << endl << endl;
break;
case '/':
d.setValue(x, y);
cout << s.calculate() << endl << endl;
break;
default:break;
}
}
}
calculate.cpp - 클래스 구현부
#include "calculator.h"
void Add::setValue(int x, int y) { this->a = x;this->b = y; }
void Sub::setValue(int x, int y) { this->a = x;this->b = y; }
void Mul::setValue(int x, int y) { this->a = x;this->b = y; }
void Div::setValue(int x, int y) { this->a = x;this->b = y; }
int Add::calculate() { return a + b; }
int Sub::calculate() { return a - b; }
int Mul::calculate() { return a * b; }
int Div::calculate() { return a / b; }
calculate.h - 클래스 선언부
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Add {
int a, b;
public:
void setValue(int x, int y);
int calculate();
};
class Sub {
int a, b;
public:
void setValue(int x, int y);
int calculate();
};
class Mul {
int a, b;
public:
void setValue(int x, int y);
int calculate();
};
class Div {
int a, b;
public:
void setValue(int x, int y);
int calculate();
};
#endif