25.07.24 학습개발일지 / C++

2025. 7. 29. 19:08·LMS 7/개발일지

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
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.07.27 학습개발일지 / C++ Study3
  • 25.07.25 개발일지 / 빌드 및 Make
  • 25.07.23 학습일지 / C++
  • 25.07.22 학습일지 / C++
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.07.24 학습개발일지 / C++
상단으로

티스토리툴바