STUDY BLOG
명품 C++ programming Chapter 03 예제 본문
명품 C++ programming Chapter 03 예제 연습
예제 3-1 Circle 클래스의 객체 생성 및 활용
#include <iostream>
using namespace std;
class Circle{
piblic:
int radius;
double getArea();
};
double Circle::getArea(){
return 3.14*radius*radius;
}
int main(){
Circle donut; // 객체 donut 생성
donut.radius =1; // donut의 멤버 변수 접근
double area = donut.getArea(); // donut의 멤버 함수 호출
cout << "donut 면적 : " << area << endl;
Circle pizza;
pizza.radius = 30;
area = pizza.getArea();
cout << "pizza 면적 : " << area << endl;
}
예제 3-2 Rectangle 클래스 만들기
// Q. 다음 main() 함수가 잘 작동하도록 너비와 높이를 가지고 면적 계산 기능을 가진 Rectangle 클래스를 작성하고
// 전체 프로그램을 완성하라.
// (main함수만 주어짐)
#include <iostream>
using namespace std;
class Rectangle {
public :
int width;
int height;
int getArea();
};
int Rectangle::getArea(){
return width*height;
}
int main(){
Rectangle rect;
rect.width =3;
rect.height =5;
cout << "사각형의 면적은 " << rect.getArea() << endl;
}
예제 3-3 2개의 생성자를 가진 Circle 클래스
#include <iostream>
using namespace std;
class Circle {
public :
int radius;
Circle();
Circle(int r);
double getArea();
};
Circle::Circle(){
radius =1;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
Circle::Circle(int r){
radius = r;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
double Circle::getArea(){
return 3.14*radius*radius;
}
int main(){
Circle donut; // donut 객체 생성, Circle() 호출
double area = donut.getArea();
cout << "donut 면적은 " << area << endl;
Circle pizza(30); // pizza 객체 생성, Circle(int r) 생성자 호출
area = pizza.getArea();
cout << "pizza 면적은 " << area << endl;
}
예제 3-4 생성자에서 다른 생성자 호출 연습 (위임 생성자 만들기 연습)
#include <iostream>
using namespace std;
class Circle {
public :
int radius;
Circle();
Circle(int r);
double getArea();
};
Circle::Circle() : Circle(1){ }
Circle::Circle(int r){
radius = r;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
double Circle::getArea(){
return 3.14*radius*radius;
}
int main() {
Circle donut;
double area = donut.getArea();
cout << "donut 면적 : " << area << endl;
Circle pizza(30);
area = pizza.getArea();
cout << "pizza 면적 : " << area << endl;
}
예제 3-5 멤버 변수 초기화와 위임 생성자 활용
//다음 Point 클래스의 멤버 x,y를 생성자 서두에 초깃값으로 초기화하고 위임 생성자를 이용하여 재작성하라.
#include <iostream>
using namespace std;
class Point{
int x, y;
public :
Point();
Point(int a, int b);
void show() { cout << "(" << x << ", " << y << ")" << endl; }
};
Point::Point() : Point(0,0) { }
Point::Point(int a, int b)
:x(a), y(b) { }
int main(){
Point origin;
Point target(10,20);
orgin.show();
target.show();
}
예제 3-6 Rectangle 클래스 만들기
//다음 main()함수가 잘 작동하도록 Rectangle 클래스를 작성하고 프로그램을 완성하라.
//Rectangle 클래스는 width,height의 두 멤버 변수와 3개의 생성자, 그리고 isSqure() 함수를 가짐
//main()함수만 주어짐
#include <iostream>
using namespace std;
class Rectangle {
public :
int width, height;
Rectangle();
Rectangle(int w, int h);
Rectangle(int length);
bool isSqure();
};
Rectangle::Rectangle() {
width = height = 1;
}
Rectangle::Rectangle(int w, int h) {
width = w; height = h;
}
Rectangle::Rectangle(int length) {
width = height = length;
}
bool Rectangle::isSquare() {
if(width==height)
return true;
else
return false;
}
int main() {
Rectangle rect1;
Rectangle rect2(3,5);
Rectangle rect3(3);
if(rect1.isSquare())
cout << "rect1은 정사각형" << endl;
if(rect2.isSquare())
cout << "rect2은 정사각형" << endl;
if(rect3.isSquare())
cout << "rect3은 정사각형" << endl;
}
예제 3-7 Circle 클래스에 소멸자 작성 및 실행
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
Circle();
Circle(int r);
~Circle();
double getArea();
};
Circle::Circle(){
radius = 1;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
Circle::Circle(int r){
radius = r;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
Circle::~Circle(){
cout << "반지름 " << radius << "인 원 소멸" << endl;
}
double Circle::getArea(){
return 3.14*radius*radius;
}
int main(){
Circle donut;
Circle pizza(30);
return 0;
}
3-8 지역 객체와 전역 객체의 생성 및 소멸 순서
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
Circle();
Circle(int r);
~Circle();
double getArea();
};
Circle::Circle(){
radius = 1;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
Circle::Circle(int r){
radius = r;
cout << "반지름 " << radius << "인 원 생성" << endl;
}
Circle::~Circle(){
cout << "반지름 " << radius << "인 원 소멸" << endl;
}
double Circle::getArea(){
return 3.14*radius*radius;
}
Circle globalDonut(1000);
Circle globalPizza(2000);
void f() {
Circle fDonut(100);
Circle fPizza(200);
}
int main(){
Circle maindonut;
Circle mainpizza(30);
f();
}
예제 3-9 다음 소스에서 컴파일 오류가 발생하는 곳은 어디인가?
#include <iostream>
using namespace std;
class PrivateAccessError {
private:
int a;
void f();
PrivateAccessError();
public:
int b;
PrivateAccessError(int x);
void g();
};
PrivateAccessError::PrivateAccessError(){
a = 1;
b = 1;
}
PrivateAccessError::PrivateAccessError(int x){
a = x;
b = x;
}
void PrivateAccessError::f(){
a = 5;
b = 5;
}
void PrivateAccessError::g(){
a = 6;
b = 6;
}
int main(){
PrivateAccessError objA; // PrivateAccessError()는 private이므로 호출불가
PrivateAccessError objB(100);
objB.a=10; // a는 private이므로 접근 불가
objB.b=20;
objB.f(); // f()는 private이므로 호출 불가
objB.g();
}
예제 3-10 Circle 클래스를 C++ 구조체를 이용하여 재작성
#include <iostream>
using namespace std;
struct StructCircle {
private:
int radius;
public:
StructCircle(int r) { radius = r; }
double getArea();
};
double StructCircle::getArea(){
return 3.14*radius*radius;
}
int main(){
StructCircle waffle(3);
cout << "면적은 " << waffle.getArea();
}
예제 3-11 헤더 파일과 cpp 파일로 분리하기
//두개의 정수를 입력받아 덧셈을 실행하는 프로그램, 헤더파일 및 cpp 파일로 분리해서 재작성
#include <iostream>
using namespace std;
class Adder{
int op1, op2;
public:
Adder(int a, int b);
int process();
};
Adder::Adder(int a, int b) {
op1 = a; op2 = b
}
int Adder::process() {
return op1 + op2;
}
class Calculator{
piblic:
void run();
};
void Calculator::run(){
cout << "두 개의 수를 입력하세요 >> ";
int a, b;
cin >> a >> b;
Adder adder(a,b);
cout << adder.process();
}
int main() {
Calculator clac;
clac.run();
}
//Adder.h
#ifndef ADDER_H
#define ADDER_H
class Adder {
int op1, op2;
public:
Adder(int a, int b);
int process();
};
#endif
//Adder.cpp
#include "Adder.h"
Adder::Adder(int a, int b) {
op1 = a; op2 = b
}
int Adder::process() {
return op1 + op2;
}
//Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator{
piblic:
void run();
};
#endif
//Calculator.cpp
#include <iostream>
using namespace std;
#intluce "Calculator.h"
#include "Adder.h"
void Calculator::run(){
cout << "두 개의 수를 입력하세요 >> ";
int a, b;
cin >> a >> b;
Adder adder(a,b);
cout << adder.process();
}
//main.cpp
int main(){
Calculator clac;
clac.run();
}
오타 지적 및 조언은 항상 환영입니다.
감사합니다
'Software > C++' 카테고리의 다른 글
명품 C++ programming Chapter 07 예제 (0) | 2020.11.25 |
---|---|
명품 C++ programming Chapter 06 예제 (0) | 2020.11.22 |
명품 C++ programming Chapter 05 예제 (0) | 2020.11.20 |
명품 C++ programming Chapter 04 예제 (1) | 2020.11.02 |
명품 C++ programming Chapter 02 예제 (0) | 2020.10.28 |