타입변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 유리수가 선 객체일경우 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; ..
클래스 설계는 타입 설계와 똑같이 취급하자. C++에서 새로운 클래스를 정의 한다는 것은 새로운 타입을 하나 정의하는 것과 같습니다. 함수와 연산자를 오버로드하고, 메모리 할당 및 해제를 제어하며, 객체 초기화 및 종료정리를 정의하는 작업, 이 모두가 여러분의 손에 달려 있습니다. 좋은 타입이란 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야 합니다. 효과적인 클래스를 설계하기 위해 고려해야 할 사항 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 이 부분에 따라 클래스 생성자 및 소멸자의 설계가 바뀝니다. 메모리 할당 함수를 직접 작성 할 경우에는 이들 함수의 설계에도 영향을 미칩니다. (operator new, operator new[], oper..
- Total
- Today
- Yesterday
- script
- 암호화
- 서귀포
- DLL
- Windows
- 패턴
- 티스토리챌린지
- Linux
- C#.NET
- Build
- 네트워크 정보
- OpenSource
- 서귀포블루버블
- C# 고급 기술
- 제주도
- 스쿠버 다이빙
- C#
- 울릉도
- 스쿠버다이빙
- C
- 현포다이브
- 외돌개
- C++
- CMake
- 블루버블
- PowerShell
- 성산블루버블
- 블루버블다이빙팀
- 오블완
- 블루버블다이브팀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |