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-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;
}
멤버변수의 초기화와 위임 생성자 활용
다음 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;
}
다음 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 값인가보다.
}
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;
}
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;
}