☆ 클래스와 오버로딩, 생성자
#include <iostream.h>
#include <string.h>
class Sales
{
private:
char *pummok;
int su, dan;
public:
Sales(char *p="우유", int s=1, int d=1000);
void Disp() const;
int GetKum() const;
};
Sales::Sales(char *p, int s, int d):su(s), dan(d)
{
pummok = new char[strlen(p)+1];
strcpy(pummok, p);
}
int Sales::GetKum() const
{
return su*dan;
}
// const 함수에서 일반 함수를 호출하지 못한다. 같은 const여야만 호출 가능.
void Sales::Disp() const
{
cout << "품목 : " << pummok << endl;
cout << "수량 : " << su << endl;
cout << "단가 : " << dan << endl;
cout << "총금액 : " << GetKum() << endl;
}
void main()
{
/*
Sales s1;
Sales s2("사과");
Sales s3("포도",5);
Sales s4("수박",3,9000);
s1.Disp();
s2.Disp();
s3.Disp();
s4.Disp();
*/
/*
Sales s[4]={Sales(), Sales("쥬스",7), Sales("오렌지", 3, 1300)};
for(int i=0;i<4;i++)
{
s[i].Disp();
}
*/
Sales *s[3];
s[0]=new Sales();
s[1]=new Sales("apple",3);
s[2]=new Sales("Banana",10,700);
for(int i=0;i<3;i++)
{
s[i]->Disp();
}
}
- 클래스 Sales 하나를 선언하고 여러가지 형식으로 사용하는 예
☆ 예제 2
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
// static 멤버 변수
// 1. 같은 클래스로 생성되는 모든 인스턴스에서 공유한다.
// 2. 호출할 때 클래스 명을 이용해서 직접 호출 가능
// 3. 초기값은 클래스 밖에서 준다. 안에서는 못 줌.
// 4. this 포인터가 없어서 주소가 없다. static 변수만 접근 가능하다.
class List
{
private:
char name[10]; // 직원 이름
char address[30]; // 집 주소
static char address2[30]; // 회사 주소
int age; // 직원 나이
public:
List(char *n="", char *add="", int a=0);
void SetHome(char *add);
static void SetOffice(char *add2);
void Disp();
};
char List::address2[30]="강남구 역삼동"; // static 변수 초기화
List::List(char *n, char *add, int a):age(a) // class 내에서 초기화를 못하므로 age의 초기화를 밖에서 해준다.
// 원래는 함수 안에서 초기화하지만 숫자는 이렇게 바로 해줄수있음.
{
strcpy(name, n);
strcpy(address, add);
}
void List::SetHome(char *add)
{
strcpy(this->address, add);
}
void List::SetOffice(char *add2) // static 함수
{
strcpy(address2, add2);
}
void List::Disp()
{
cout << setw(10) << name << setw(20) << address << setw(20) << List::address2 << setw(7) << age << endl;
}
void write(List *p)
{
for(int i=0;i<3;i++,p++)
{
p->Disp();
}
}
void main()
{
List em[3]={List("박철민", "송파구", 34), List("이승기", "강동구", 21), List("강호동", "서대문구", 34)};
cout << "초기값 출력 \n";
write(em);
cout << "변경된 값 출력(0번 변경해 보기)\n";
em[0].SetHome("하와이");
em[0].SetOffice("스위스");
write(em);
}
-
☆ 프렌드 함수중복
#include <iostream.h>
#include <string.h>
class Point
{
private:
int x, y;
public:
Point(int x=0, int y=0);
friend void Disp(Point &po); //전역함수를 친구로 지정하는 것. 멤버가 아님!
};
Point::Point(int x, int y)
{
this->x=x;
this->y=y;
}
void Disp(Point &po)
{
cout << "x: " << po.x << ", y=" << po.y << endl;
}
void main()
{
Point a(100, 200);
Disp(a);
}
-
'기반지식 > C/C++' 카테고리의 다른 글
중앙정보학원 C/C++/OOP 강좌 17일차 - 2010년 7월 1일 (0) | 2010.07.01 |
---|---|
중앙정보학원 C/C++/OOP 강좌 16일차 - 2010년 6월 30일 (0) | 2010.06.30 |
중앙정보학원 C/C++/OOP 강좌 14일차 - 2010년 6월 28일 (0) | 2010.06.28 |
중앙정보학원 C/C++/OOP 강좌 13일차 - 2010년 6월 25일 (0) | 2010.06.25 |
중앙정보학원 C/C++/OOP 강좌 12일차 - 2010년 6월 24일 (0) | 2010.06.24 |