Microsoft PowerPoint - Chapter 6.ppt

Similar documents
Microsoft PowerPoint - additional06.ppt [호환 모드]

프입2-강의노트-const-friend-static

PowerPoint Template

Microsoft PowerPoint - additional07.ppt [호환 모드]

C++ Programming

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional08.ppt [호환 모드]

PowerPoint Template

슬라이드 1

C++ Programming

C++ Programming

PowerPoint Presentation

설계란 무엇인가?

Microsoft PowerPoint - additional03.ppt [호환 모드]

C++ Programming

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - Chapter 10.ppt

PowerPoint Template

Microsoft PowerPoint - [2009] 02.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - Chapter 4-rev

쉽게 풀어쓴 C 프로그래밍

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - C++ 5 .pptx

C프로-3장c03逞풚

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

윤성우의 열혈 TCP/IP 소켓 프로그래밍

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

PowerPoint Presentation

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

쉽게 풀어쓴 C 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - Chap12-OOP.ppt

JAVA PROGRAMMING 실습 05. 객체의 활용

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Microsoft PowerPoint - chap06-2pointer.ppt

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

080629_CFP °ø°³¿ë.hwp

윤성우의 열혈 TCP/IP 소켓 프로그래밍

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

윤성우의 열혈 TCP/IP 소켓 프로그래밍

chap10.PDF

PowerPoint Presentation

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - chap11-포인터의활용.pptx

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

11장 포인터

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft PowerPoint - 05장(함수) [호환 모드]

Microsoft PowerPoint 장강의노트.ppt

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint 프레젠테이션

슬라이드 1

Slide 1

프입2-강의노트-C++기초

8. 클래스 D는클래스 A, 클래스 B, 클래스 C로부터상속받아맊들고싶다. 아래빈칸을채우시오. ( 대소문자주의하시오 ) class D { ; Student s; 11. 다음프로그램의실행결과는? 9. 다음프로그램의실행결과는? class A{ A(){cout << " 생성

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Microsoft PowerPoint - chap06-5 [호환 모드]

기초컴퓨터프로그래밍

KNK_C_05_Pointers_Arrays_structures_summary_v02

Design Issues

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 2강

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - additional-11_13l.ppt [호환 모드]

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

설계란 무엇인가?

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

설계란 무엇인가?

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint Presentation

Microsoft PowerPoint - 5주_강의노트

Slide 1

untitled

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint Template

Microsoft PowerPoint - Chapter_08.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

C++ Programming

JVM 메모리구조

Transcription:

6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park

클래스와 const Jong Hyuk Park

C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3

C 의 const (1) int n=10; const int* pn=&n; *pn=20; // 컴파일오류 int n1=10; int n2=20; int* const pn=&n1; *pn=20; pn=&n2; // 컴파일오류 4

멤버변수의상수화 #include<iostream> using std::cout; using std::endl; class Student const int id; int age; char name[20]; char major[30]; public: Student(int _id, int _age, char* _name, char* _major) id=_id; age=_age; strcpy(name, _name); strcpy(major, _major); int main() Student Kim(200577065, 20, "Kim Gil Dong", "Computer Eng."); Student Hong(200512065, 19, "Hong Gil Dong", "Electronics Eng."); Kim.ShowData(); cout<<endl; Hong.ShowData(); 컴파일에러 상수값을생성자에서초기화하여발생 5 ; void ShowData() cout<<" 이름 : "<<name<<endl; cout<<" 나이 : "<<age<<endl; cout<<" 학번 : "<<id<<endl; cout<<" 학과 : "<<major<<endl; Member initializer 사용 Const 멤버변수초기화

멤버변수의상수화 (2) #include<iostream> using std::cout; using std::endl; 6 class Student const int id; int age; char name[20]; char major[30]; public: Student(int _id, int _age, char* _name, char* _major) : id(_id), age(_age) strcpy(name, _name); int main() strcpy(major, _major); Student Kim(200577065, 20, "Kim Gil Dong", "Computer Eng."); void ShowData() Student Hong(200512065, 19, "Hong Gil Dong", "Electronics Eng."); cout<<" 이름 : "<<name<<endl; cout<<" 나이 : "<<age<<endl; Kim.ShowData(); cout<<" 학번 : "<<id<<endl; cout<<endl; cout<<" 학과 : "<<major<<endl; Hong.ShowData(); ;

const 멤버함수 멤버함수의상수화 함수내부에서멤버변수의값을변경할수없음 이함수내에서상수화되지않은함수의호출을허용하지않음 멤버변수의포인터의리턴을허용하지않음 사용예 void ShowData() const cout<<" 이름 : "<<name<<endl; cout<<" 나이 : "<<age<<endl; cout<<" 학번 : "<<id<<endl; cout<<" 학과 : "<<major<<endl; 7

const 멤버함수예 (1) #include <iostream> using std::cout; using std::endl; class Count int cnt; public : Count() : cnt(0) int* GetPtr() const return &cnt; // Compile Error int main() Count count; count.increment(); count.showdata(); void Increment() cnt++; ; void ShowData() const ShowIntro(); // Compile Error cout<<cnt<<endl; void ShowIntro() cout<<" 현재 count 의값 : "<<endl; 8

const 멤버함수예 (2) #include <iostream> using std::cout; using std::endl; class Count int cnt; public : Count() : cnt(0) const int* GetPtr() const return &cnt; void Increment() cnt++; 9 ; void ShowData() const ShowIntro(); cout<<cnt<<endl; void ShowIntro() const cout<<" 현재 count 의값 : "<<endl; int main() Count count; count.increment(); count.increment(); count.showdata();

const 객체 const 객체 데이터의변경이허용되지않는객체 const 함수이외에는호출불가 const 와함수오버로딩 const 도함수오버로딩조건에포함 void function(int n) const..... void function(int n)..... 10

const 멤버함수예 11 #include <iostream> using std::cout; using std::endl; class AAA int num; public : AAA(int _num) : num(_num) void Add(int n) num+=n; void ShowData() cout<<num<<endl; ; int main() const AAA aaa(10); aaa.add(10); // Compile Error aaa.showdata(); // Compile Error #include <iostream> using std::cout; using std::endl; class AAA int num; public : AAA(int _num) : num(_num) void ShowData() cout<<"void ShowData() 호출 "<<endl; cout<<num<<endl; void ShowData() const cout<<"void ShowData() const 호출 "<<endl; cout<<num<<endl; ; int main() const AAA aaa1(20); AAA aaa2(70); aaa1.showdata(); // void ShowData() const 호출 aaa2.showdata(); // void ShowData() 호출

클래스와 static Jong Hyuk Park

정적멤버 (static member) 정적멤버 같은클래스형으로선언된여러객체들이동일한하나의자료를공유 클래스의정의시멤버를 static 이란키워드로정의 클래스내에선언된정적멤버는정적멤버가선언된클래스로사용영역이제한된전역변수 (global variable) 클래스내에서정적멤버를선언할때정적멤버자체가정의되는것은아니기때문에클래스밖에서정적멤버를정의하는선언필요 모든정적멤버변수는특별히초기값을명시하지않는한 0 으로초기화 13

/* PersonCount1.cpp */ #include<iostream> using std::cout; using std::endl; int count=1; class Person char name[20]; int age; public: Person(char* _name, int _age) strcpy(name, _name); age=_age; cout<<count++<<" 번째 Person 객체생성 "<<endl; void ShowData() cout<<" 이름 : "<<name; cout<<" 나이 : "<<age; ; int main(void) Person p1("lee", 13); Person p2("hong", 22); 1 번째 Person 객체생성 2 번째 Person 객체생성 14

/* PersonCount2.cpp */ #include<iostream> using std::cout; using std::endl; class Person char name[20]; int age; int count; public: Person(char* _name, int _age) count=1; strcpy(name, _name); age=_age; cout<<count++<<" 번째 Person 객체생성 "<<endl; void ShowData() cout<<" 이름 : "<<name; cout<<" 나이 : "<<age; ; int main(void) Person p1("lee", 13); Person p2("hong", 22); 1 번째 Person 객체생성 1 번째 Person 객체생성 15

16 /* PersonCount3.cpp */ #include<iostream> using std::cout; using std::endl; class Person char name[20]; int age; static int count; public: Person(char* _name, int _age) strcpy(name, _name); age=_age; cout<<count++<<" 번째 Person 객체생성 "<<endl; void ShowData() cout<<" 이름 : "<<name; cout<<" 나이 : "<<age; ; int Person::count=1; // static 멤버초기화 int main(void) Person p1("lee", 13); Person p2("hong", 22); 1 번째 Person 객체생성 2 번째 Person 객체생성

정적멤버 (static member) 17

정적멤버사용예 (1) #include <iostream> using std::cout; class Point static int xval, yval; // 정적멤버선언 public: setpt(int x, int y) xval = x; yval = y; void showxy() cout << xval << ", " << yval << '\n'; ; int Point::xval, Point::yval; // 정적멤버정의 int main() Point pt1, pt2; 12, 6 12, 6 전용부분멤버 xval, yval 을정적멤버로선언하고클래스밖에서통용범위지정연산자 :: 로소속클래스를명시하여정의하면객체 pt1, pt2 가자료를공유하여같은값을출력한다. pt1.setpt(12,6); pt1.showxy(); pt2.showxy(); 객체 pt1 static int xval,yval 객체 pt2 18

정적멤버사용예 (2) #include <iostream> using std::cout; class Test public: static int n; // 정적멤버선언 void setn(int a) n = a; void shown() cout << n << '\n'; ; int Test::n; // 정적멤버정의 int main() Test x,y; 88 88 정적멤버는클래스밖에서정의되므로객체와관계없이직접참조될수있다. 이예에서 n 을특정객체와무관하게 88 로지정할수있다. Test::n = 88; // 정적멤버참조 x.shown(); y.shown(); 19

정적멤버 (static member) int main(void) class AAA AAA a1(10); a1.showdata(); int val; static int n; public: AAA(int a=0) val=a; n++; void ShowData() cout<<"val: "<<val<<endl; cout<<"n: "<<n<<endl; ; int AAA::n=1; AAA a2(20); a2.showdata(); 20

정적멤버 (static member) static 멤버의특징 클래스변수, 클래스함수라한다. main 함수호출이전에메모리공간에올라가서초기화 ( 전역변수와동일 ) 선언된클래스의객체내에직접접근허용 static 멤버초기화문으로초기화해야함 21

explicit & mutable explicit 명시적호출만허용한다. mutable const 에예외를둔다 22

explicit & mutable /* explicit.cpp */ #include<iostream> using std::cout; using std::endl; class AAA public: explicit AAA(int n) cout<<"explicit AAA(int n)"<<endl; ; int main(void) AAA a1=10; 23

explicit & mutable /* mutable.cpp */ #include<iostream> using std::cout; using std::endl; 24 class AAA private: mutable int val1; int val2; public: void SetData(int a, int b) const val1=a; // val1이 mutable이므로 OK! val2=b; // Error! ; int main(void) AAA a1; a1.setdata(10, 20);

과제 1. 5장의은행계좌관리과제프로그램에다음을추가하여라 6-4절과같이멤버함수상수화 25

Jong Hyuk Park