C++ 2-2

BakJeonghyun·2022년 9월 11일
0

전공C++

목록 보기
4/20

예제

3-3

2개의 생성자를 가진 Circle 클래스

<출력결과>
반지름 1 원 생성
donut 면적은 3.14
반지름 30 원 생성
pizza 면적은 2826

#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;
}

Circle::getArea() {
	return 3.14*radius*radius;
}

int main() {
	/*두 개의 객체 생성*/
    Circle donut;	//자동으로 Circle::Circle()생성자 호출됨
    double area = donut.getArea();
    cout << "donut 면적은 " << area << endl;
    
    Circle pizza(30);	//자동으로 Circle::Circle(int r)생성자 호출됨
    area = pizza.getArea();
    cout << "pizza 면적은 " << area << endl;
}

3-4

생성자에서 다른 생성자 호출 연습(위임 생성자 만들기)

3-3을 수정하여 객체 초기화를 전담하는 타겟 생성자와 타겟 생성자에게 객체 초기화를 위임하는 위임 생성자로 재작성하라.

: 중복된 초기화 코드를 하나의 생성자로 몰고, 다른 생성자에서 이 생성자를 호출한다.

Circle::Circle() : Circle(1) { } //위임 생성자
Circle::Circle(int r) {
radius = r;
cout << "반지름 " << radius << " 원 생성" << endl;
} //타겟 생성자

#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;
}	타겟 생성자

Circle::getArea() {
	return 3.14*radius*radius;
}

int main() {
	/*두 개의 객체 생성*/
    Circle donut;	//자동으로 Circle::Circle()생성자 호출됨
    double area = donut.getArea();
    cout << "donut 면적은 " << area << endl;
    
    Circle pizza(30);	//자동으로 Circle::Circle(int r)생성자 호출됨
    area = pizza.getArea();
    cout << "pizza 면적은 " << area << endl;
}

3-5

멤버변수의 초기화와 위임 생성자 활용

다음 Point 클래스의 멤버 x,y를 생성자 서두에 초기값으로 초기화하고 위임 생성자를 이용하여 재작성하라.

class Point {
int x, y;
public:
Point();
Point(int a, int b);
}
Point::Point() {x=0; y=0;}
Point::Point(int a, int b) {x=a; y=b;}

<출력결과>
(0, 0)
(10, 20)

/*내 코드*/
#include <iostream>
using namespace std;

class Point {
	int x, y;
public:
	Point();
    Point(int a, int b);
};

Point::Point() : Point(0, 0) { }

Point::Point(int a, int b) : x(a),y(b) {
    cout << "(" << a << ", " << b << ")" << endl;
}

int main() {
	Point origin;
    Point target(10, 20);
}

/*교재 코드*/
#include <iostream>
using namespace std;

class Point {
	int x, y;
public:
	Point();
    Point(int a, int b);
    void show() {cout << "(" << a << ", " << b << ")" << endl;}
};

Point::Point() : Point(0, 0) { }

Point::Point(int a, int b) : x(a),y(b) {}

int main() {
	Point origin;
    Point target(10, 20);
    origin.show;
    target.show;
}

3-6 - Rectangle 클래스 만들기

다음 main() 함수가 잘 작동하도록 Rectangle 클래스를 작성하고 프로그램을 완성하라. Rectangle 클래스는 width, height의 두 멤버 변수, 3개의 생성자, 그리고 isSquare() 함수를 가진다.

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;
//isSquare는 bool 값인가보다.
}

<출력결과>
rect1은 정사각형이다.
rect3는 정사각형이다.

#include <iostream>
using namespace std;

class Rectagle {
public:
	int width, height;
    Rectagle();
    Rectagle(int x, int y);
    Rectagle(int n);
    bool isSquare();
};
Rectagle::Rectagle(){
	width = 1;
    height = 1;
}
Rectagle::Rectagle(int x, int y){
	width = x;
    height = y;
}
Rectagle::Rectagle(int n){
	width = n;
    height = n;
}
bool Rectangle::isSquare(){
	if(width==height)
    	return true	//1;
    else return false	//0;
}
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;
    //isSquare는 bool 값인가보다.
}



과제

실습 Activity 2


  1. 다음과 같은 main()의 실행결과가 다음과 같도록 Tower 클래스를 작성하시오.
int main() {
	Tower myTower;	//1 미터
	Tower seoulTower(100);	//100 미터
	cout << "높이는 " << myTower.getHeight() << "미터" << endl;
	cout << "높이는 " << seoulTower.getHeight() << "미터" << endl;
}

<출력결과>
높이는 1미터
높이는 100미터

#include <iostream>
using namespace std;

class Tower {
public:
	int height;
    Tower();
    Tower(int h);
    double getHeight();
};
Tower::Tower() : Tower(1) {}
Tower::Tower(int h) : height(h) {}
double Tower::getHeight() {return height;}

int main() {
	Tower myTower;	//1 미터
	Tower seoulTower(100);	//100 미터
	cout << "높이는 " << myTower.getHeight() << "미터" << endl;
	cout << "높이는 " << seoulTower.getHeight() << "미터" << endl;
}


  1. 은행에서 사용하는 프로그램을 작성하기 위해 은행계좌 하나를 표현하는 클래스 Account가 필요하다. 다음과 같은 main()의 실행결과가 다음과 같도록 Account클래스를 작성하시오.
int main() {
	Account a("kitae", 1, 5000);	//id 1번, 잔액 5000원, 이름이 kitae인 계좌생성
	a.deposit(50000);	//50000원 적금
    cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
    int money = a.withdraw(20000);	//20000원 출금. withdraw()는 출금한 실제 금액 리턴
    cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
}

<출력 결과>
kitae의 잔액은 55000
kitae의 잔액은 35000

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

class Account {
public:
	string name;
	int id;
	int balance;		//잔액

	Account(string n, int i, int b);
	int deposit(int d);	//입금
	string getOwner();	//계좌주인이름
	int inquiry();	//잔액조회
	int withdraw(int w);	//출금
};
Account::Account(string n, int i, int b) {
	name = n;
	id = i;
	balance = b;
}
int Account::deposit(int d) {
	balance = balance + d;
    return balance;
}
string Account::getOwner() {
	return name;
}
int Account::inquiry() {
	return balance;
}
int Account::withdraw(int w) {
	balance = balance - w;
    return balance;
}

int main() {
	Account a("kitae", 1, 5000);	//id 1번, 잔액 5000원, 이름이 kitae인 계좌생성
	a.deposit(50000);	//50000원 적금
	cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
	int money = a.withdraw(20000);	//20000원 출금. withdraw()는 출금한 실제 금액 리턴
	cout << a.getOwner() << "의 잔액은 " << a.inquiry() << endl;
}

profile
I just got started a blog.

0개의 댓글