• 검색 결과가 없습니다.

암 시 적 /명 시 적 복 사 생 성 자

N/A
N/A
Protected

Academic year: 2023

Share "암 시 적 /명 시 적 복 사 생 성 자"

Copied!
18
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

객 체 객 체 객 체 객 체 지 향 지 향 지 향 지 향 프 로 그 래 밍 프 로 그 래 밍 프 로 그 래 밍 프 로 그 래 밍 (O b je c t O ri e n te d P ro g ra m m in g ) (O b je c t O ri e n te d P ro g ra m m in g ) (O b je c t O ri e n te d P ro g ra m m in g ) (O b je c t O ri e n te d P ro g ra m m in g ) 1 2 장 강 사 – 강 대 기

(2)

차 례 차 례 차 례 차 례 (A g e n d a ) (A g e n d a ) (A g e n d a ) (A g e n d a )

멤 버 에 대 한 동 적 메 모 리 할 당

암 시 적 /명 시 적 복 사 생 성 자

암 시 적 /명 시 적 오 버 로 딩 대 입 연 산 자

생 성 자 에 n e w 사 용 하 기

s ta ti c 클 래 스 멤 버

객 체 에 위 치 지 정 n e w 사 용 하 기

객 체 를 지 시 하 는 포 인 터

(3)

S tr in g B a d S tr in g B a d S tr in g B a d S tr in g B a d 클 래 스 클 래 스 클 래 스 클 래 스

멤 버 에 포 인 터 사 용 – s tr

s ta ti c 멤 버 n u m _ s tr in g s – 단 하 나 만 생 성 됨

s ta ti c 클 래 스 멤 버 초 기 화 방 법 (7 1 3 쪽 )

intStringBad::num_strings= 0; const나enum을사용하여클래스선언안에서초 기화(619쪽)

생 성 자 에 서 n e w [] 를 사 용 하 면 파 괴 자 에 서 d e le te [] 를 사 용

(4)

S tr in g B a d S tr in g B a d S tr in g B a d S tr in g B a d 클 래 스 클 래 스 클 래 스 클 래 스 사 용 사 용 사 용 사 용 시 의 시 의 시 의 시 의 문 제 점 문 제 점 문 제 점 문 제 점 ---- ve g n e w s .c p p ve g n e w s .c p p ve g n e w s .c p p ve g n e w s .c p p (7 1 7 (7 1 7 (7 1 7 (7 1 7 쪽쪽쪽쪽 ))))

callme2(headline2); 값으로함수인자전달임시객체생성, 얕은복사수행 StringBadsailor = sports; 새로정의하는객체에대입 복사생성자를사용하거나, 복사생성자로임시객체생성 후대입연산자사용 복사생성자, 대입연산자, 얕은복사수행 knot = headline1; 다른객체에대입대입연산자사용, 얕은복사수행

(5)

컴 파 일 러 가 컴 파 일 러 가 컴 파 일 러 가 컴 파 일 러 가 몰 래 몰 래 몰 래 몰 래 만 드 는 만 드 는 만 드 는 만 드 는 멤 버 멤 버 멤 버 멤 버 함 수 함 수 함 수 함 수

생 성 자 가 없 을 경 우 , 디 폴 트 생 성 자

복 사 생 성 자

대 입 연 산 자

파 괴 자

주 소 연 산 자 – o p e ra to r&

콤 마 연 산 자 – o p e ra to r,

(6)

디 폴 트 디 폴 트 디 폴 트 디 폴 트 생 성 자 생 성 자 생 성 자 생 성 자

어 떠 한 생 성 자 도 만 들 지 않 으 면 생 기 며 , 전 달 인 자 는 없 다

다 른 생 성 자 를 만 들 면 , 없 어 짐

명 시 적 으 로 디 폴 트 생 성 자 를 만 들 거 나

디 폴 트 전 달 인 자 를 사 용 하 여 구 현

개 선 방 안

this->str= new char[1]; 로초기화함

(7)

복 사 복 사 복 사 복 사 생 성 자 생 성 자 생 성 자 생 성 자 (7 2 3 (7 2 3 (7 2 3 (7 2 3 쪽쪽쪽쪽 ))))

어떤객체를받아서그내용을그대로복사해서, 새로 운객체를생성 Class_name(constClass_name&); StringBad(constStringBad&); 호출되는예 StringBadditto(motto); StringBadmetoo= motto; StringBadalso = StringBad(motto); StringBad* pS= new StringBad(motto); 또한객체를함수의전달인자로값으로전달할때 복사생성자도생성자이므로new/초기화수행

(8)

대 입 대 입 대 입 대 입 연 산 자 연 산 자 연 산 자 연 산 자 (o p e ra to r= ) (7 2 8 (o p e ra to r= ) (7 2 8 (o p e ra to r= ) (7 2 8 (o p e ra to r= ) (7 2 8 쪽쪽쪽쪽 ))))

객체에다른객체를대입 Class_name& Class_name::operator=(const Class_name&); StringBad& StringBad::operator=(const StringBad&); 호출되는예 knot = headline1; StringBadmetoo= knot; 문제해결방법 보충(738쪽) StringBad& StringBad::operator=(const char *);

(9)

개 선 된 개 선 된 개 선 된 개 선 된 S tr in g S tr in g S tr in g S tr in g 클 래 스 클 래 스 클 래 스 클 래 스

friend booloperator<(const String&, const String&); friend booloperator>(const String&, const String&); friend booloperator==(const String&, const String&); friend istream& operator>>(istream&, String&); char& operator[](inti); const char& operator[](inti); const

(10)

비 교 비 교 비 교 비 교 멤 버 멤 버 멤 버 멤 버 (7 3 4 (7 3 4 (7 3 4 (7 3 4 쪽쪽쪽쪽 ))))

friend booloperator<(const String& s1, const String& s2) { return (std::strcmp(s1.str,s2.str)<0); } 프렌드함수로String 객체와C 스타일문자열비교 if (love==answer) if (operator==(love,answer)) // 프렌드함수 if (operator==(String(love),answer)) // 생성자

(11)

[] [] [] [] 표 기 로 표 기 로 표 기 로 표 기 로 개 별 개 별 개 별 개 별 문 자 문 자 문 자 문 자 접 근 접 근 접 근 접 근 (7 3 5 (7 3 5 (7 3 5 (7 3 5 쪽쪽쪽쪽 ))))

S tr in g o p e ra ( “ T h e M a g ic F lu te ” );

o p e ra [4 ]

opera[](inti) opera.operator[](4)

m e a n s [0 ] = ‘ r ’ ; // c o n s t 가 아 닌 o p e ra to r

means.operator[](0) =‘r’; means.str[0] =‘r’;

c o n s t 객 체 를 위 해 c o n s t 멤 버 함 수 로 오 버 로 딩

(12)

s ta ti c s ta ti c s ta ti c s ta ti c 클 래 스 클 래 스 클 래 스 클 래 스 멤 버 멤 버 멤 버 멤 버 함 수 함 수 함 수 함 수

함 수 정 의 와 함 수 선 언 이 분 리 되 어 있 으 면 , s ta ti c 은 함 수 선 언 에 나 타 남

객 체 에 의 해 호 출 되 지 않 음

th is 포 인 터 도 없 음

클 래 스 이 름 과 사 용 범 위 연 산 자 (: :) 로 호 출

intcount = String::HowMany();

s ta ti c 데 이 터 멤 버 만 사 용 가 능 , 아 니 면 내 부 적 으 로 객 체 생 성

(13)

생 성 자 에 서 생 성 자 에 서 생 성 자 에 서 생 성 자 에 서 n e w n e w n e w n e w 를를를를 사 용 할 사 용 할 사 용 할 사 용 할 경 우 경 우 경 우 경 우

파 괴 자 에 서 도 d e le te 를 사 용

n e w 는 d e le te 로 , n e w [] 는 d e le te [] 로

포 인 터 를 N U L L 또 는 0 으 로 초 기 화 허 용

깊 은 복 사 를 하 는 복 사 생 성 자

EC++ #12

깊 은 복 사 를 하 는 대 입 연 산 자

EC++ #11

(14)

객 체 객 체 객 체 객 체 리 턴 리 턴 리 턴 리 턴

객체, 객체참조, const 객체, const 객체참조 const 객체참조 (복) 객체참조 (복)과 객체리턴 , const 객체리턴 (752)을 net = force1+force2; // force1+force2 = net; // cout<< (force1+force2 = net).magval() << endl; //

(15)

n e w n e w n e w n e w 에에에에 의 한 의 한 의 한 의 한 객 체 의 객 체 의 객 체 의 객 체 의 초 기 화 초 기 화 초 기 화 초 기 화 (7 5 5 (7 5 5 (7 5 5 (7 5 5 쪽쪽쪽쪽 ))))

Class_name: 클래스이름, value가Type_name형 Class_name* pC= new Class_name(value); Class_name(Type_name); (사) Class_name(constType_name&); 모호성이없는한일반적인변환은가능 예: int를double 로 디폴트생성자호출 Class_name* pC= new Class_name

(16)

포 인 터 와 포 인 터 와 포 인 터 와 포 인 터 와 객 체 객 체 객 체 객 체

파괴자 자동변수블록을벗어나면호출 정적변수프로그램이종료될때호출 동적변수new 로생성/ delete 될때호출 new로포인터초기화 String* f = new String(myString); 디폴트생성자 String* g = new String; String(constchar *) 생성자 String* f = new String(mymy my); 멤버에접근하려면->, 객체에접근하려면*

(17)

위 치 위 치 위 치 위 치 지 정 지 정 지 정 지 정 n e w n e w n e w n e w 다 시 다 시 다 시 다 시 보 기 보 기 보 기 보 기

메모리지정new, Placement new placenew1.cpp (760쪽) 동일한위치에위치지정new를두번한것 new 위치지정new로생성된객체들은파괴자를호출하지않음 메모리가중복되지않게한다 p1 = new (buffer) JustTesting; p2 = new (buffer+sizeof(JustTesting)) JustTesting; 파괴자를명시적으로호출한다 p1->~ JustTesting(); p3->~ JustTesting();

(18)

큐큐큐큐 시 뮬 레 이 션 시 뮬 레 이 션 시 뮬 레 이 션 시 뮬 레 이 션

인 터 페 이 스 – 7 6 9 쪽 코 드

링 크 드 리 스 트 – 7 7 0 쪽

큐 클 래 스 선 언 (7 7 1 쪽 ) – 내 포 된 구 조 체 정 의 로 링 크 드 리 스 트 를 넣 음 (7 7 2 쪽 노 트 )

c o n s t 멤 버 변 수 초 기 화 (7 7 3 쪽 ) – 멤 버 초 기 자 리 스 트 문 법 7 7 4 쪽 )

e n q u e u e (7 7 5 쪽 ), d e q u e u e (7 7 7 쪽 ), 파 괴 자 (7 7 9 쪽 )

새 로 운 고 객 함 수 n e w c u s to m e r (7 8 5 쪽 )

참조

관련 문서

따라서 정소의 생식세포에서 hspA2 유전자가 특히 많이 발현이 되며, 정자 형성이 정지된 환자 정소의 hspA2 발현이 정상적으로 정자형성이 일어나는 정소 조직에 비

제10조(제품의 수거등의 권고 등) ① 중앙행정기관의 장은 시중에 유통되는 제품의 제조․설계 또는 제품상 표시 등의 결함으로 인하여 소비자의 생명․신체 또는 재산에 위해를

[r]

「오존층 보호를 위한 특정물질의 제조규제 등에 관한 법률」 제2조제1호에 따른 특정물질의 배출 억제 및 특정물질의 사용합리화를 위한 사업. 오존층 보호를 위한

중소유통기업(유통산업을 경영하는 자로서 「중소기업기본법」 제2조에 따른 중소기업자에 해당하는 자를 말한다.. 그 밖에 유통산업의

제18조(석유의 수입․판매 부과금) ④ 산업통상자원부장관은 제1항에 따른 부과금 징수대상자가 납부기한까지 부과금을 내지 아니하면 그 납부기한의 다음 날부터

2.. 이하 같다)가 종전의 규정에 따라 전기공급사업을 실시한 단위공사지역 내에서 이 법 개정으로 인하여 전기수용자 1호당 재정융자금의 상환금액이 이 법 시행

ㅇ 지원근거 : 중재법 보칙 제40조, 무역거래기반 조성에 관한 법률 제4조 - 중재법 보칙 제40조(상사중재기관에 대한 보조). 정부는 이 법에 의하여