C++ study2
1. 오버로딩
과제1) Area() 함수 오버로딩
/* Area() 함수 오버로딩
문제: 도형의 넓이를 구하는 Area() 함수를 오버로딩하여 원, 사각형, 삼각형 넓이를 각각 계산하세요.
@조건
double Area(double radius) 원
int Area(int width, int height) 사각형
double Area(double base, double height) 삼각형
*/
// 예시
Area(3.0); // 원: 3.14 * r * r
Area(4, 5); // 사각형: w * h
Area(4.0, 5.0); // 삼각형: 0.5 * b * h
#include <iostream>
using namespace std;
// 넓이(Area) 클래스
class Area_calculator {
public:
double Area(double radius) { // 원의 넓이 구하는 함수
return 3.14 * radius * radius;
}
int Area(int width, int height){ // 사각형의 넓이 구하는 함수
return width * height;
}
double Area(double base, double height) { // 삼각형의 넓이 구하는 함수
return 0.5 * base * height;
}
};
int main() {
// Area_calculator 객체 생성 및 함수 호출
Area_calculator a;
cout<<"원의 넓이 : " << a.Area(5.0)<< endl; // 원의 넓이
cout<<"사각형의 넓이 : " << a.Area(4, 5)<< endl; // 사각형의 넓이
cout<<"삼각형의 넓이 : " << a.Area(4.0, 5.0)<< endl; // 삼각형의 넓이
return 0;
}

과제2) Swap() 함수 오버로딩
/*
Swap() 함수 오버로딩
문제: 두 값을 서로 바꾸는 Swap() 함수를 int, double, string에 대해 각각 구현하세요.
조건
void Swap(int &a, int &b)
void Swap(double &a, double &b)
void Swap(string &a, string &b)
*/
// 예시
int x = 10, y = 20;
Swap(x, y); // x = 20, y = 10
#include <iostream>
using namespace std;
// 넓이(Area) 클래스
class Swap_num {
public:
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
void swap(double &a, double &b) {
double temp = a;
a = b;
b = temp;
}
void swap(string &a, string &b) {
string temp = a;
a = b;
b = temp;
}
};
int main() {
// Swap_num 객체 생성 및 함수 호출
Swap_num s;
int x = 10, y = 20;
s.swap(x, y);
cout << "결과 : " << x << ", " << y << endl;
double m = 1.5, n = 2.5;
s.swap(m, n);
cout << "결과 : " << m << ", " << n << endl;
string str1 = "Lee", str2 = "Myoung Jin";
s.swap(str1, str2);
cout << "결과 : " << str1 << ", " << str2 << endl;
return 0;
}

과제3) Book 클래스 생성자 오버로딩으로 초기화 구현
/*
Book 클래스 생성자 오버로딩 구현
요구 조건
1. Book 클래스 멤버 변수
string title;
string author;
int price;
2. 다음 생성자들을 오버로딩하여 구현
기본 생성자: Book()
제목만 받는 생성자: Book(string title)
제목과 저자 받는 생성자: Book(?, ?)
전체 정보를 받는 생성자: Book(?, ?, ?)
3. 각 생성자로 초기화한 멤버변수를 다음 형태로 출력하는 함수를 구현
void PrintInfo();
*/
// 실행 예시
Book b1;
Book b2("C++ Primer");
Book b3("Effective C++", "Scott Meyers");
Book b4("Clean Code", "Robert C. Martin", 30000);
// PrintInfo() 출력 결과
제목: 정보 없음, 저자: 정보 없음, 가격: 0원
제목: C++ Primer, 저자: 정보 없음, 가격: 0원
제목: Effective C++, 저자: Scott Meyers, 가격: 0원
제목: Clean Code, 저자: Robert C. Martin, 가격: 30000원
# include <iostream>
using namespace std;
// Book 클래스
class Book{
private:
std::string title; // 책 제목
std::string author; // 책 저자
int price; // 책 가격
public:
// 기본 생성자
Book()
: title("정보 없음"), author("정보 없음"), price(0) {}
// 제목만 있는 생성자
Book(string title)
: title(title), author("정보 없음"), price(0) {}
// 제목과 저자만 있는 생성자
Book(string title, string author)
: title(title), author(author), price(0) {}
// 제목, 저자, 가격이 모두 있는 생성자
Book(string title, string author, int price)
: title(title), author(author), price(price) {}
// 책 정보 출력 함수
void printInfo() {
cout << "제목: " << title << endl;
cout << "저자: " << author << endl;
cout << "가격: " << price << "원" << endl;
}
int main(void){
// 기본 생성자 객체 생성
Book book1;
// 제목만 있는 생성자 객체 생성
Book book2("C++ Primer");
// 제목과 저자만 있는 생성자 객체 생성
Book book3("Effective C++", "Scott Meyers");
// 제목, 저자, 가격이 모두 있는 생성자 객체 생성
Book book4("Clean Code", "Robert C. Martin", 30000);
// 기본 생성자 객체의 정보 출력
book1.printInfo();
std::cout << std::endl;
// 제목만 있는 생성자 객체의 정보 출력
book2.printInfo();
std::cout << std::endl;
// 제목과 저자만 있는 생성자 객체의 정보 출력
book3.printInfo();
std::cout << std::endl;
// 제목, 저자, 가격이 모두 있는 생성자 객체의 정보 출력
book4.printInfo();
return 0;
}
};

2. 동적할당
과제4) new & delete
/*
정수 N개를 입력받아 평균을 구하는 프로그램
요구 조건
1. 사용자에게 입력받은 정수 N개의 배열을 동적으로 할당(new)
2. 사용자로부터 정수를 N개 입력받아 총합과 평균 계산
3. 프로그램 종료 전 메모리 해제(delete[])
*/
// 구현 예시
#include <iostream>
using namespace std;
int main() {
int n;
// [1] 사용자로부터 입력할 정수 개수 받기
// [2] 입력받은 정수만큼 int 배열의 크기 동적 메모리 할당
// [3] 반복문으로 입력받은 n 개수만큼 정수 입력 받기
// [4] 반복문으로 총합 및 평균 계산
int sum = 0;
// [5] 출력
cout << "\n총합: " << sum << endl;
cout << "평균: " << average << endl;
// [6] 동적 메모리 해제
return 0;
}
# include <iostream>
using namespace std;
int main() {
// 입력할 정수 개수
int n;
cout << "정수의 개수를 입력하세요: ";
cin >> n;
// 동적 배열 생성
int * ptr = new int[n];
for (int i = 0; i < n; i++) {
cout << i+1 << "번째 정수 : ";
cin >> ptr[i]; // n개 만큼 배열에 값 입력
}
// 총합 및 평균 계산
int sum = 0;
double average = 0;
for (int i = 0; i < n; i++) {
sum += ptr[i];
}
average = (double)sum / n;
// 결과 출력
cout << "총합: " << sum << endl;
cout << "평균: " << average << endl;
// 동적 배열 메모리 해제
delete[] ptr;
return 0;
}

과제5) enum / book 클래스 배열 동적 생성
/*
Member와 SignUp 클래스를 활용한 생성자 오버로딩 & 유효성 검사 구현
요구 조건
1. main() 함수에서 할 일
- 사용자로부터 도서 수 입력 받기 (int n)
- Book* books = new Book[n]; 로 동적 배열 생성
- 각 도서마다 enum을 사용해 입력 항목을 선택하고, 적절한 생성자로 초기화
>> 교재의 프로젝트 01단계 enum, switch 사용 예시 참고
- 모든 도서 정보를 반복문을 통해 출력 (PrintInfo())
- 프로그램 종료 전에 delete[] books;로 메모리 해제
2. 구혼 조건
- 클래스:Book 클래스는 생성자 오버로딩 4개 포함
- enum:입력 방식 선택을 위한 enum 정의 >> 교재의 프로젝트 01단계 enum, switch 사용 예시 참고
- 동적 할당 :new와 delete[]로 동적 메모리 관리
- 출력: 모든 책 정보는 PrintInfo()를 통해 출력
*/
// 입력 항목을 enum과 숫자로 정의 >> switch와 사용자 입력에 사용
enum InputType {
TITLE_ONLY = 1,
TITLE_AUTHOR = 2,
ALL_INFO = 3
};
// Member 클래스 예시
class Book {
private:
string title;
string author;
int price;
public:
Book(); // 기본 생성자
Book(string title); // 제목만 받는 생성자
Book(string title, string author); // 제목과 저자
Book(string title, string author, int price); // 전체 정보
void PrintInfo(); // 정보 출력
};
// 실행 결과
도서 수를 입력하세요: 2
[1번째 도서]
입력 항목 선택: (1)제목만 (2)제목+저자 (3)전체 : 2
제목: Modern C++
저자: Scott Meyers
[2번째 도서]
입력 항목 선택: (1)제목만 (2)제목+저자 (3)전체 : 3
제목: Clean Code
저자: Robert C. Martin
가격: 30000
----- 도서 정보 출력 -----
제목: Modern C++, 저자: Scott Meyers, 가격: 0원
제목: Clean Code, 저자: Robert C. Martin, 가격: 30000원
enum 입력 유형을 명확하게 정의
switch-case 열거형을 기반으로 생성자 선택 분기
new / delete[] 동적 클래스 배열 생성과 메모리 관리
생성자 오버로딩 입력 형태에 따른 다양한 초기화 방식 구현
#include <iostream>
using namespace std;
// enum
enum InputType {
TITLE_ONLY = 1,
TITLE_AUTHOR = 2,
ALL_INFO = 3
};
// 제목, 저자, 가격 정보를 저장하고 출력하는 Book 클래스
class Book {
private:
string title; // 책 제목
string author; // 책 저자
int price; // 책 가격
public:
// 기본 생성자
Book()
: title("정보 없음"), author("정보 없음"), price(0) {};
// 제목만 있는 생성자
Book(string title)
: title(title), author("정보 없음"), price(0) {};
// 제목과 저자만 있는 생성자
Book(string title, string author)
: title(title), author(author), price(0) {};
// 전체 정보가 있는 생성자
Book(string title, string author, int price)
: title(title), author(author), price(price) {};
// 책 정보를 출력하는 함수
void PrintInfo(){
cout << "제목: " << title << ", ";
cout << "저자: " << author << ", ";
cout << "가격: " << price << "원" << endl;
}
};
int main(void){
// 도서의 개수를 입력
int n;
cout << "책의 개수를 입력하세요: ";
cin >> n;
// 동적 메모리 할당을 통해 Book 객체 배열 생성
Book* books = new Book[n];
// 각 책의 정보를 입력받음
for(int i = 0; i < n; i++){
// 입력 방식 선택
int inputType;
cout << "[" << i+1 << "번째 도서]\n" << "정보 입력 방식 : 1. 제목, 2. 제목, 저자, 3. 제목, 저자, 가격\n> ";
cin >> inputType;
// 입력 방식에 따라 책 정보를 입력받음
switch(inputType){
case TITLE_ONLY:
{
string title;
cout << "제목을 입력하세요 : ";
cin.ignore(); // 이전 입력 버퍼 비우기
getline(cin, title); // 제목 입력 (공백 포함 가능)
books[i] = Book(title);
}
break;
case TITLE_AUTHOR:
{
string title, author;
cout << "제목을 입력하세요 : ";
cin.ignore(); // 이전 입력 버퍼 비우기
getline(cin, title); // 제목 입력 (공백 포함 가능)
cout << "저자를 입력하세요 : ";
cin.ignore(); // 이전 입력 버퍼 비우기
getline(cin, author); // 저자 입력 (공백 포함 가능)
books[i] = Book(title, author);
}
break;
case ALL_INFO:
{
string title, author;
int price;
cout << "제목을 입력하세요 : ";
cin.ignore(); // 이전 입력 버퍼 비우기
getline(cin, title); // 제목 입력 (공백 포함 가능)
cout << "저자를 입력하세요 : ";
cin.ignore(); // 이전 입력 버퍼 비우기
getline(cin, author); // 저자 입력 (공백 포함 가능)
cout << "가격을 입력하세요 : ";
cin >> price; // 가격 입력
books[i] = Book(title, author, price);
}
break;
default:
cout << "잘못된 입력입니다." << endl;
i--; // 재입력
continue;
}
}
// 입력된 도서 정보 출력
cout << "\n-----입력된 도서 정보-----" << endl;
for(int i = 0; i < n; i++){
cout << "[" << i+1 << "번째 도서 정보]\n";
books[i].PrintInfo();
}
// 동적 메모리 해제
delete[] books;
return 0;
}

C++ 문제 01-1(p22)

#include <iostream>
int main(){
int num;
int sum = 0;
for(int i = 0; i<5; i++){
std::cout<<i+1<<"번째 정수 입력: ";
std::cin>>num;
sum += num;
}
std::cout<<"합계 : "<<sum<<std::endl;
return 0;
}


#include <iostream>
int main(){
char name[100];
char phone_number[20];
std::cout<<"이름을 입력하세요: ";
std::cin>>name;
std::cout<<"전화번호를 입력하세요: ";
std::cin>>phone_number;
std::cout<<"이름: "<<name<<", 전화번호: "<<phone_number<<std::endl;
return 0;
}


#include <iostream>
int main(){
int num;
std::cout << "숫자를 입력하세요 : ";
std::cin >> num;
std::cout << "구구단 " << num << "단" << std::endl;
for(int i = 1; i<10; i++){
std::cout << num << " * " << i << " = " << num * i << std::endl;
}
return 0;
}


#include <iostream>
int main(){
int standard_pay = 50; // 기본 급여
int sales_amount; // 입력받을 판매 금액
double bonus_rate = 0.12; // 판매 금액에 대한 보너스 비율
while(sales_amount != -1){
std::cout << "판매금액을 입력하세요 (종료: -1): ";
std::cin >> sales_amount;
if(sales_amount == -1){
break; // 종료 조건
}
double bonus = sales_amount * bonus_rate;
double total_pay = standard_pay + bonus;
std::cout << "당신의 급여: " << total_pay << "만원" << std::endl;
}
std::cout << "프로그램을 종료합니다." << std::endl;
return 0;
}

'LMS 7 > 개발일지' 카테고리의 다른 글
| 25.07.27 학습개발일지 / C++ Study3 (3) | 2025.07.30 |
|---|---|
| 25.07.25 개발일지 / 빌드 및 Make (3) | 2025.07.29 |
| 25.07.23 학습일지 / C++ (3) | 2025.07.29 |
| 25.07.22 학습일지 / C++ (3) | 2025.07.29 |
| 25.07.21 개발일지 / 채팅 프로그램 5팀 (1) | 2025.07.29 |