I'm FanJae.

[C++ 기본 연습 문제] Chapter 03. 클래스의 기본 본문

C++/Basic Practice

[C++ 기본 연습 문제] Chapter 03. 클래스의 기본

FanJae 2024. 9. 3. 00:48

1. Chapter 03. 클래스의 기본

 

1-1. 구조체 내에 함수정의하기

① - 2차원 평면상에서의 좌표를 표현할 수 있는 구조체를 다음과 같이 정의하였다.

- 위의 구조체를 기반으로 다음의 함수를 정의하고자 한다. (자세한 기능은 실행의 예를 통해서 확인하도록 한다).

- 단, 위의 함수들을 구조체 안에 정의를 해서 다음의 형태로 main함수를 구성될 수 있어야 한다.

struct Point
{
int xpos;
int ypos;
};
void MovePos(int x, int y); // 점의 좌표이동
void AddPoint(const Point &pos); // 점의 좌표증가
void ShowPosition(); // 현재 x, y 좌표정보 출력
#include <iostream>

struct Point
{
	int xpos;
	int ypos;

	void MovePos(int x, int y); // 점의 좌표이동
	void AddPoint(const Point& pos); // 점의 좌표증가
	void ShowPosition(); // 현재 x, y 좌표정보 출력

};

int main(void)
{
	Point pos1 = { 12, 4 };
	Point pos2 = { 20, 30 };

	pos1.MovePos(-7, 10);
	pos1.ShowPosition(); //[5, 14] 출력

	pos1.AddPoint(pos2);
	pos1.ShowPosition(); //[25, 44] 출력
	return 0;
}

void Point::MovePos(int x, int y)
{
	xpos += x;
	ypos += y;
}
void Point::AddPoint(const Point& pos)
{
	xpos += pos.xpos;
	ypos += pos.ypos;
}
void Point::ShowPosition()
{
	std::cout << "[" << xpos << ", " << ypos << "]" << std::endl;
}

 

1-2. 클래스의 정의

① - 계산기 기능의 Calculator 클래스를 정의해보자. 기본적으로 지니는 기능은 덧셈, 뺄셈, 곱셈 그리고 나눗셈이며, 연산을 할 때마다 어떠한 연산을 몇 번 수행했는지 기록되어야 한다. 아래의 main 함수와 실행의 예에 부합하는 Calculator 클래스를 정의하면 된다.
- 단, 멤버변수는 private으로, 멤버함수는 public으로 선언하자.

int main(void)
{
    Calculator cal;
    cal.Init();
    
    cout << "3.2+2.4= " << cal.Add(3.2, 2.4) << endl;
    cout << "3.5/1.7=" << cal.Div(3.5, 1.7) << endl;
    cout << "2.2-1.5=" << cal.Min(2.2, 1.5) << endl;
    cout << "4.9/1.2=" << cal.Div(4.9, 1.2) << endl;
    
    cal.ShowOpCount();
    return 0;
}
#include <iostream>
class Calculator
{
public:
    void Init()
    {
        for (int i = 0; i < 4; i++)
        {
            counter[i] = 0;
        }
    }
    double Add(double n1, double n2)
    {
        counter[0]++;
        return n1 + n2;
    }
    double Min(double n1, double n2)
    {
        counter[1]++;
        return n1 - n2;
    }
    double Mul(double n1, double n2)
    {
        counter[2]++;
        return n1 * n2;
    }
    double Div(double n1, double n2)
    {
        counter[3]++;
        return n1 / n2;
    }
    void ShowOpCount()
    {
        std::cout << "덧셈 : " << counter[0] << " 뺄셈 : " << counter[1] << " 곱셈 : " << counter[2] << " 나눗셈 : " << counter[3];
    }
private:
    int counter[4];
};

int main(void)
{
    Calculator cal;
    cal.Init();

    std::cout << "3.2+2.4= " << cal.Add(3.2, 2.4) << std::endl;
    std::cout << "3.5/1.7=" << cal.Div(3.5, 1.7) << std::endl;
    std::cout << "2.2-1.5=" << cal.Min(2.2, 1.5) << std::endl;
    std::cout << "4.9/1.2=" << cal.Div(4.9, 1.2) << std::endl;

    cal.ShowOpCount();
    return 0;
}

 

 

② - 문자열 정보를 내부에 저장하는 printer라는 이름의 클래스를 디자인하자.
- 이 클래스의 두 가지 기능은 다음과 같다
- 1.문자열 저장
- 2.문자열 출력
- 아래의 main 함수와 실행의 예에 부합하는 Printer 클래스를 정의하되,
- 이번에도 역시 멤버변수는 private, 멤버함수는 public으로 선언하자.

int main(void)
{
        Printer pnt;
        pnt.SetString("Hello world!");
        pnt.ShowString();

        pnt.SetString("I love C++");
        pnt.ShowString();

        return 0;
}
#include <iostream>
#include <cstring>
#define MAX_LENGTH 105
class Printer
{
private:
    char temp_str[105];
public:
    void SetString(const char* temp)
    {
        strcpy_s(temp_str, MAX_LENGTH, temp);
    }
    void ShowString()
    {
        std::cout << temp_str << std::endl;
    }
};

int main(void)
{
    Printer pnt;
    pnt.SetString("Hello world!");
    pnt.ShowString();

    pnt.SetString("I love C++");
    pnt.ShowString();

    return 0;
}

 

Comments