박민영

명품 C++ 프로그래밍 5장 연습문제

Created March 8, 2022

5-1

#include <iostream>
#include <string>
using namespace std;

class Circle
{
	int radius;
public:
	Circle() { this->radius = 1; }
	Circle(int r) { this->radius = r; }
	void show() { cout << "반지름: " << radius << endl; }
};

int main()
{
	Circle a(1), b(2);
	a.show();
	b.show();
	swap(a,b);
	a.show();
	b.show();
}

void swap(Circle& a, Circle& b)
{
	Circle& temp = a; //Circle temp=a;라고 해도 됨.
	a = b;
	b = temp;
}

5-2

#include <iostream>
#include <string>
using namespace std;

void half(double& m)
{
	m /= 2;
} 

int main()
{
	double n = 20;
	half(n);
	cout << n;
}

5-3

#include <iostream>
#include <string>
using namespace std;

void combine(string a, string b, string& c)
{
	c = a + " " + b;
}

int main()
{
	string text1("I love you"), text2("very much");
	string text3;
	combine(text1, text2, text3);
	cout << text3;
}

5-4

#include <iostream>
#include <string>
using namespace std;

bool bigger(int a, int b, int& big)
{
	if (a == b)
	return true;
	if (a > b)
	big = a;
	else
		big = b;
	return false;
}
int main()
{
	bool b;
	cout << "정수 2개를 입력하시오:";
	int n, m, big;
		cin >> n >> m;
		b=bigger(n, m, big);
		if (b)
			cout << "same" << endl;
		else
			cout << "더 큰 수는 " << big << endl;
}

5-5

#include <iostream>
#include <string>
using namespace std;

class Circle {
	int radius;
public:
	Circle(int r) { radius = r; }
	int getRadius() { return radius; }
	void setRadius(int r) { radius = r; }
	void show() { cout << "반지름이 " << radius << "인 원" << endl; }
};
void increaseBy(Circle& a, Circle b)
{
	int r = a.getRadius() + b.getRadius();
	a.setRadius(r);
}

int main()
{
	Circle x(10), y(5);
	increaseBy(x, y);
	x.show();
}

5-6

#include <iostream>
#include <string>
using namespace std;

char& find(char a[], char c, bool& success)
{
	for (int i = 0; i <strlen(a); i++)
	{
		if (a[i] == c)
		{
			success = true;
			return a[i];
		}
		else
		{
			success = false;
		}
	}

}

int main()
{
	char s[] = "Mike";
	bool b = false;
	char& loc = find(s, 'M', b);
	if (b == false)
	{
		cout << "M을 발견할 수 없다" << endl;
		return 0;
	}
	loc = 'm';
	cout <

5-7

#include <iostream>
#include <string>
using namespace std;

class MyIntStack
{
	int p[10];
	int tos;
public:
	MyIntStack();
	bool push(int n);
	bool pop(int& n);
};

MyIntStack::MyIntStack()
{
	tos = 0;
}

bool MyIntStack::push(int n)
{
	if (tos == 10)
		return false;
	p[tos] = n;
	tos++;
	return true;
}

bool MyIntStack::pop(int& n)
{
	if (tos==0)
		return false;
	tos--;
	n = p[tos];
	return true;
}


int main()
{
	MyIntStack a;
	for (int i = 0; i < 11; i++)
	{
		if (a.push(i))cout << i << ' ';
		else cout << endl << i + 1 << " 번째 stack full" << endl;
	}
	int n;
	for (int i = 0; i < 11; i++)
	{
		if (a.pop(n))cout << n << ' ';
		else cout << endl << i + 1 << " 번째 stack empty";
	}
	cout << endl;
}

5-8

#include <iostream>
#include <string>
using namespace std;

class MyIntStack {
	int* p;
	int size;
	int tos;
public:
	MyIntStack() { size = 0; tos = 0; }
	MyIntStack(int size){ this->size = size;this->p = new int[size];}
	MyIntStack(const MyIntStack& s) {
		int len = s.size;
		this->p = new int[len];
		this->size = len;
		this->tos = s.tos;

		for (int i = 0; i <= tos; i++)
		{
			this->p[i] = s.p[i];
		}
	}
	~MyIntStack() { delete [] p; }
	bool push(int n);
	bool pop(int& n);
};

bool MyIntStack::push(int n)
{
	if (tos == size)
		return false;
	p[tos] = n;
	tos++;
		return true;
}

bool MyIntStack::pop(int& n)
{
	if (tos == 0)
		return false;
	tos--;
	n = p[tos];
	return true;
}

int main()
{
	MyIntStack a(10);
	a.push(10);
	a.push(20);
	MyIntStack b = a;
	b.push(30);

	int n;
	a.pop(n);
	cout << "스택 a에서 팝한 값 " << n << endl;
	b.pop(n);
	cout << "스택 b에서 팝한 값 " << n << endl;
}

5-9

#include <iostream>
#include <string>
using namespace std;

class Accumulator {
	int value;
public:
	Accumulator(int value) { this->value = value; }
	Accumulator& add(int n) { value += n; return *this; }
	int get(){ return value; }
};

int main()
{
	Accumulator acc(10);
	acc.add(5).add(6).add(7);
	cout << acc.get();
}

5-10

#include <iostream>
#include <string>
using namespace std;

class Buffer {
	string text;
public:
	Buffer(string text) { this->text = text; }
	void add(string next) { text += next; }
	void print() { cout << text << endl; }
};

Buffer& append(Buffer& b, string s)
{
	b.add(s);
	return b;
};

int main()
{
	Buffer buf("Hello");
	Buffer& temp = append(buf, "Guys");
	temp.print();
	buf.print();
}

5-11

#include <iostream>
#include <string>
using namespace std;

class Book {
	char* title;
	int price;
public:
	Book(const char* title, int price);
	Book(Book& b);
	~Book();
	void set(const char* title, int price);
	void show() { cout << title << ' ' << price << "원" << endl; }
};

Book::Book(const char* title, int price) {
	int len = strlen(title);
	this->title = new char[len + 1];
	strcpy(this->title, title);
	this->price = price;
}

Book::~Book() {
	if (title)
		delete[] title;
}

void Book::set(const char* title, int price)
{
	if (this->title)
		delete[]this->title;
	int len = strlen(title);
	this->title = new char[len + 1];
	strcpy(this->title, title);
	this->price = price;
}

/*
Book::Book(Book&b)
{
title=b.title;
price=b.price;
*/

Book::Book(Book& b) {
	int len = strlen(b.title);
	title = new char[len + 1];
	strcpy(title, b.title);
	price = b.price;
}

int main() {
	Book cpp("명품C++", 10000);
	Book java = cpp;
	java.set("명품자바", 12000);
	cpp.show();
	java.show();
}