C++ 함수 호출 규약 (calling conventions)은 함수 호출 시 함수 인자와 반환값을 처리하는 방식을 정의하는 규칙입니다. 호출 규약은 컴파일러와 링커가 일관되게 함수 호출을 처리하도록 합니다. 다음은 주요 호출 규약의 종류, 설명, 차이점, 예제 코드, 그리고 간단한 어셈블리 코드 예제입니다.1. cdecl (C Declaration)설명: 기본 C 호출 규약으로, 인자는 오른쪽에서 왼쪽으로 스택에 푸시됩니다. 함수 호출자가 스택을 정리합니다.장점:유연성: 가변 인수 함수에서 사용 가능.호출 규약의 일관성: C와 C++에서 많이 사용되어 표준화됨.디버깅 편리성: 호출자가 스택을 정리해 디버깅이 쉬움.int __cdecl add(int a, int b) { return a + b;}p..
모형화할 때는 객체 합성을 사용하자 합성(composition)이란, 어떤 타입의 객체들이 그와 다른 타입의 객체들을 포함하고 있을 경우에 성립하는 그 타입들 사이의 관계를 일컫습니다. 포함된 객체들을 모아서 이들을 포함한 다른 객체를 합성한다는 뜻인데, 다음과 같은 경우입니다. 문제점 1 2 3 4 5 6 7 8 9 10 11 12 13 class Address { …. }; // 누군가의 거주지 class PhoneNumber { …. }; class Person { public: private: std::string mane; // 이 클래스를 이루는 객체 중 하나 Address address; // 마찬가지 PhoneNumber voiceNumber; // 역시 마찬가지 PhoneNumber fa..
상속받은 기본 매개변수 값은 절대로 재 정의하지 말자 C++에서 상속받을 수 있는 함수: 가상, 비가상 함수 상속되는 함수는 동적으로 바인딩 된다., 기본 매개변수는 정적 바인딩된다. 가상 함수는 동적으로 바인딩되지만, 런타임 효율성 때문에 기본 매개변수 값은 정적으로 바인딩된다. 동적 바인딩은 늦은 바인딩(late binding)이라고도 불리는데, 객체가 실행 시 그 순간의 상태에 따라 일어난다. 프로그래밍에서 변수들은 정수나 문자열 등 형태에 따라 그 변수에 저장되는 값의 저장방법이나 조작방법이 달라진다. 전통적인 컴파일러들이나 어셈블러들은 컴파일 시점에 변수의 형식을 할당하는 정적 바인딩을 제공하였으나, 객체지향 언어들은 실행 시 키보드 또는 기타 다른 소스로부터 값이 변수에 들어오는 그 순간에 변..
상속받은 비 가상 함수는 재정의하면 안 된다 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 36 37 #include class A { public: void f() { std::cout 총평 public 상속은 is-a 관계입니다. 그리고 비가상 함수는 클래스 파생에 관계없는 불변 동작을 정해주는 것입니다. 즉 불변의 동작을 원하여 만든 함수를 파생 클래스에서 다시 정의하면 이것이 목적이 있어 다시 정의하는 것이라면 결국 비 가상 함수를 쓸 이유가 전혀 없다는 것입니다. 결국. 목적이 있어 다시 정의하는 함수 일 경우에는 가상함수를 쓰는 것 이 좋습니다. 결국에는 비 가상 함수는..
가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. 1) 비가상 인터페이스 관용구(non-virtual interface)를 사용하자. - 공개되지 않은 가상 함수를 비가상 public 멤버 함수로 감싸서 호출하는, 템플릿 메서드 패턴의 한 형태 - NVI에서 가상 함수가 엄격하게 public 일 필요는 없다. - 장점 : 가상 함수가 호출되기 전에 어떤 상태를 구성하고 가상 함수가 호출된 후에 그 상태를 없애는 작업을 래퍼를 통해 공간적으로 보장된다. *비가상 인터페이스 관용구(non-virtual interface)란? - 사용자로 하여금 public 비가상 멤버 함수를 통해 private 가상 함수를 간접적으로 호출하게 만드는 방법. - 관용구에 쓰이는 비가상 함수는 가상함수의 래..
인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자. 인터페이스 상속과 구현 상속은 무엇을 의미하는가? 기본 클래스의 멤버 함수의 상속 방법을 두고 하는 말이다. 인터페이스 상속과 구현 상속의 차이점은 무엇인가? 인터페이스 상속이란, 순수 가상 함수의 상속을 말한다. 구현 상속이란, 가상 함수와 비가상 함수의 상속을 말한다. 각 함수들은? 순수 가상 함수 : 가상 함수이나, 함수의 정의 부분이 없고, 선언 부분만 있는 함수 가상 함수 : 파생 클래스에서 가상 함수를 받는 함수가 없다면, 기본 클래스 함수가 호출되고 있다면, 파생 클래스의 가상 함수를 호출시켜주는 매체가 되는 함수 비 가상 함수 : 일반 멤버 함수, 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..
- Total
- Today
- Yesterday
- 스쿠버 다이빙
- OpenSource
- 네트워크 정보
- C#.NET
- Windows
- 서귀포블루버블
- 스쿠버다이빙
- C++
- 성산블루버블
- 외돌개
- C#
- 패턴
- 암호화
- effective
- script
- 블루버블다이빙팀
- C
- 블루버블
- PowerShell
- CMake
- Build
- 현포다이브
- 제주도
- 블루버블다이브팀
- Effective c++
- C# 고급 기술
- 울릉도
- Linux
- 서귀포
- DLL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |