내가 바보인데다 게을러서 이런데다 올리는거니깐 존나 까도 좋은데 답만알려주라;;
#include<iostream>
using namespace::std;
char str[100];
class Account{
int id;
int balance;
char* name;
public:
Account() {}
Account(int id, int balance, char* name){
this->id = id;
this->balance = balance;
this->name = new char[strlen(name)+1];
strcpy(this->name, name);
}
~Account(){
delete []name;
}
Account(const Account& acc){ //복사생성자
this->id = acc.id;
this->balance = acc.balance;
this->name = new char[strlen(acc.name)+1];
strcpy(this->name, acc.name);
}
int getId(){
return id;
}
int getBalance(){
return balance;
}
char* getName(){
return name;
}
void AddMoney(int money){
this->balance += money;
}
void MinMoney(int money){
this-> balance -= money;
}
void showAll(){
cout << "-----------------------------------" << endl;
cout << "ID : " << this->id << endl;
cout << "Balance : " << this->balance << endl;
cout << "Name : " << this->name << endl;
cout << "-----------------------------------" << endl;
}
};
Account* pArray[100];
int index=0;
void PrintMenu();
void MakeAccount();
void Deposit();
void Withdraw();
void Inquire();
int main(void){
int op;
while(true){
PrintMenu();
cin >> op;
if(op == 1)
MakeAccount();
else if(op == 2)
Deposit();
else if(op == 3)
Withdraw();
else if(op == 4)
Inquire();
else
break;
}
pArray[index] = new Account(pArray[0]);
return 0;
}
void PrintMenu(){
cout << "=============================================" << endl;
cout << "1. 계좌 계설" << endl;
cout << "2. 입 금" << endl;
cout << "3. 출 금" << endl;
cout << "4. 전체 고객 잔액 조회" << endl;
cout << "이외의 수를 입력하면 종료합니다.." << endl;
cout << "=============================================" << endl;
cout << "입력: ";
}
void MakeAccount(){
int id;
int balance;
cout << "생성할 계좌의 ID: ";
cin >> id;
cout << "생성할 계좌의 소유주: ";
cin >> str;
cout << "생성할 계좌의 잔액: ";
cin >> balance;
pArray[index++] = new Account(id, balance, str);
}
void Deposit(){
int id; int balance;
cout << "입금할 계좌의 ID: ";
cin >> id;
cout << "입금할 금액: ";
cin >> balance;
for(int i=0 ; i<index ; i++){
if(pArray[i]->getId() == id){
pArray[i]->AddMoney(balance);
break;
}
}
}
void Withdraw(){
int id;
int balance;
cout << "출금할 계좌의 ID: ";
cin >> id;
cout << "출금할 금액: ";
cin >> balance;
for(int i=0 ; i<index ; i++){
if(pArray[i]->getId() == id){
if(pArray[i]->getBalance() < balance){
cout << "잔액부족!" << endl;
break;
}
else{
pArray[i]->MinMoney(balance);
cout << "출금성공!" << endl;
}
}
}
}
void Inquire(){
cout << "===========================================" << endl;
for(int i=0 ; i<index ; i++)
pArray[i]->showAll();
cout << "===========================================" << endl;
}
반도의 흔한 기본예제인데;;
내가 궁금한게 뭐냐면
저위에 복사생성자 있잖아
복사생성자에서 Account에서 멤버변수들은 분명 private인데 어떻게 그냥 접근이 가능하지?;;
전에 복사생성자 볼때는 아무렇지 않게 넘겼는데
이제와서 타이핑해보면서 보니깐 겁나 이상한거 같아서;;
저리쳐도 왜 에러가 안나는지 모르겠어
형들 좀 도와줘 ㅠㅠ
처음엔 const키워드 붙여줘서 객체 상수화시키면 상수화된 함수아니면 못쓰니깐 허용해주는걸까도 생각해봤는데;;
const빼줘도 허용되는걸 봐서 그건 아닌거같고;;
private 는 같은 클래스 내에서 접근가능하지 않나. 내가 cpp 키워드나 메서드 시그니쳐는 잘 모르지만, 그리고 외부의 값이라 하더라도, 메서드 파라메터로 넘어온거면 해당 메모리 주소를 넘겨줘서 접근가능함 [from DCHub WP8.0.10211.0]
왜 첨볼때는 이게 이상해 보이지 않았는지 모르겠네 ㅠㅠ
클래스만 같으면 객체가 달라도 접근가능한거야?
아 그렇구나 ㅠ;;
private도 제대로 이해하지 못하고있었네;;
그동안 객체내부에서만 접근이 가능한줄알았었어 ㅠㅠ;;
고마워 ㅎㅎ
이런식으로 하는건 첨봐서 그런지 많이 생소하네;;
const 로 넘어온건 분명 매개변수잖아. 우리가 private 키워드를 접근 할 수 없는건, 해당 값이 어디있는지 은폐되어... 모르는거거든, 하지만 메모리 주소를 알거나 값을 알면 접근 할 수 있지. const 를 쓴건, 값복사를 의도하거나, 매개변수로 넘겨준 값이 원래 인스턴스에서 변하지 않도록 의도한거 아닐까 ? [from DCHub WP8.0.10211.0]
열심히 하라우! 근데 난 cpp 잘 모르니까. 다른사람한테도 꼭 묻길 바래 [from DCHub WP8.0.10211.0]
혹 public이 생략된거아님? private넣고해봐봐
힌정지 생략시 기본이 publivlc인지 private인지 헷갈림
LastCorona // const 키워드 뜻은 알앗는데 형 말이 맞는거같아. 딴함수 만들때도 외부객체 받아서 쓰는식으로해도 같은클래스라면 안에서 접근가능하네 ㅇㅇ
꼬마야 // class는 기본이 private이야
꼬마야 // struct가 기본이 public
꼬마야 // 아무래도 접근제어자 문제는 아닌듯하고 애초에 private이 클래스만 같다면 접근 가능하게 되어있나봐
정의를 소홀히 해서 헷갈린듯 ㅎㅎ
여튼 형들 고마워 ㅎㅎ
프갤 짱짱맨^^
조공좀
오홋 신기하네 나중에 확인해봐야겠다 ㅎㅎ
이게 왠 외계어인가요
힝아 // 내가 어휘력이 딸려서 하는말이 이상하긴 해도 이해가 안될정도일줄은 몰랐어;; 미안;;