예외를 던지지 않는 SWAP에 대한 지원도 생각해 보자 타이틀 입력부분C++에서 SWAP 이란 두 객체의 값을 ‘맞바꾸기’한다는 것을 말함. 기존의 SWAP의 동작을 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 namespace { void swap(int a,int b) { int temp; Temp = a; a = b; b = temp; } } cs 어김없이 동작을 하게 되어있습니다. 하지만 예외의 swap의 동작을 요구하는 swap도 있습니다. 예제1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class AA { public: private: int a,b,c; std::vectorv; }; c..
타입변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 유리수가 선 객체일경우 operator를 사용하면 에러가 뜬다. 문제점 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 class Rational { public: Rational(int num = 0, int num1 = 1); //explicit붙이지 않는 이유는 int에서 Rational로의 암시적 변환을 허용하기위해… const Rational operator*(const Rational& rhs ) const; }; void main() { Rational Eighth(1, 8); Rational Ha..
맴버 함수보다는 비멤버 비프랜드 함수와 더 가까워지자 비 멤버함수로 구현한 것이 캡슐화 정도가 더 좋기 때문이다. 어떤 객체의 데이터에 접근할 수 있는 코드가 적을수록 캡슐화가 잘 되어 있는 것이라 할 수 있다. 외부에서 변경 불가능한 영역이 넓을수록 외부와 관계가 적으며, 그로인해 내부 구현이 바뀌더라도 외부에 많은 영향을 주지 않음. 멤버함수는 객체의 private영역까지 접근할 수 있다. 그러나 비멤버함수는 public영역 외에는 접근이 불가능하므로, 그 객체의 데이터에 직접적으로 접근할 여지가 줄어든다. 따라서 캡슐화가 멤버함수에 비하여 잘된 것이라 할 수 있음. 주의할 것은 이러한 비멤버함수의 이점은 비프렌드 함수일 때만 적용된다. 프렌드 함수는 접근권한이 멤버함수와 같으므로 캡슐화 정도도 똑같..
데이터 멤버가 선언될 곳은 private 영역임을 명시하자. 데이터 멤버를 public에 선언할 경우 어디에서든지 누구나 데이터에 접근할수 있기 때문에, 읽기, 쓰기, 접근권한을 갖게 되지만, 이 값을 읽고 쓰는 함수가 있으면 접근 불가, 읽기 전용, 읽기 쓰기 접근을 여러분이 직접 구현할 수 있습니다. 심지어 쓰기 전용 접근도 필요하다면 구현 할 수 있습니다. 세밀한 통제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class AccessLevels { public: int getReadOnly()const { return readOnly; } void setReadWrite( int value ) { readWrite = ..
함수에서 객체를 반환해야 할 경우에 참조자를 반환하지 말자. 참조자를 왜 반환해도 되지 않나? 매개변수가 참조자이고, 그 참조자를 반환하는 경우에는 상관이 없다. 하지만, 함수 내부에서 선언된 객체의 경우에는 크게 잘못 된다. 이유? 스택에 올라간 객체는 존재 할수 있는 범위(Scope)가 있다. 함수 내부에 선언(스택에 올려진)된 객체의 경우, 함수 종료 후 사라진다. 그러므로 안에 있던 객체를 참조자로 리턴하게되면 문제가 발생한다. 함수에서 객체를 반환하는 경우, 임시 객체를 생성하는 것을 피하기 위해 참조자를 반환하려고 시도하는 경우가 있다. 그러나 그것은 옳은 방법이 아니다. 참조자라는 것은 이미 존재하는 객체에 대한 별칭과 같은 것이다. 함수에서 스택에 임시로 생성된 객체에 대해 참조자를 반환하..
'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식이 대개 낫다 CALL BY REFERENCE vs CALL BY VALUE 사본을 주고받는 값에 의한 전달은 고비용의 연산이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Person { public: Person(); virtual ~Person(); private: std::string name; std::string address; }; class Student : public Person { public: Student(); virtual ~Student(); private: std::string schoolName; ..
- Total
- Today
- Yesterday
- 울릉도
- Build
- C
- 외돌개
- C# 고급 기술
- 암호화
- C++
- 윈도우
- 패턴
- DLL
- 블루버블
- PowerShell
- 성산블루버블
- 제주도
- 스쿠버다이빙
- CMake
- 블루버블다이빙팀
- ip
- script
- OpenSource
- C#
- 서귀포
- 블루버블다이브팀
- 스쿠버 다이빙
- C#.NET
- 현포다이브
- 티스토리챌린지
- Linux
- 서귀포블루버블
- Windows
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |