C++ Prime by Prata Ch. 8 Adventures in Functions

Function etc ..

C++ Inline Functions

일반 함수와의 차이는 ‘코딩’ 의 차이가 아닌 ‘컴파일이 어떻게 프로그램으로 가져오느냐’ 의 차이.

컴파일의 결과는 실행 프로그램이다. 실행 시 OS 는 메모리에 띄우고, 순차적으로 진행. 일반 함수는 다른 주소로 점프했다가 되돌아 옴.
함수 호출에 다다르면, 함수호출 후에 즉시 지시부분 주소를 메모리에 저장하고, 함수의 인수를 스택에 저장하고,  함수의 처음으로 지정된 메모리로 가서 함수를 실행하고 (결과값을 해당 레지스터에 저장하고), 주소가 저장된 지시부분으로 돌아온다.
앞으로, 뒤로 점프하는 과정은 함수 이용에 지연시간을 발생시킴.

C++ 인라인 함수는 대안 제시. 컴파일된 코드는 해당 함수로 대체함.  점프과정 없음.  하지만, 메모리는 더 사용.

인수에 식(4.5 + 3.5) 이 들어가면 그 값(8) 이 적용됨.  C의 매크로보다 우수.

별도의 프로토타입이 없어도 C++의 프로토타이핑 기능이 역할을 한다. 처음 나오는 부분이 프로토 기능을 함.  즉, 정수나 롱 을 넣어도 더블로 타입케스팅 된다.

Inline vs. Macros

#define SQARE(X) X*X
// 단순한 텍스트 대체..
#define SQARE(X) (X)*(X)
// 역시 '값'으로 전달하지는 않음.

매크로를 인라인으로 컨버팅하는 것을 추천.

Reference Variables

레퍼런스는 이미 정의된 변수에 대한 별명, 대안 이름.
함수에 대한 ‘포멀한 인수’ 로 쓰임. 레퍼런스로 주면 ‘복사된 값’ 이 아닌 ‘원래 데이터’ 를 갖고 기능 수행.
거대한 스트럭쳐 포인터에 대한 편리한 대안.

Creating a Reference Variable

& : 변수의 주소.

int rats;
int & rodents = rats; // 별명. ## 초기화 필요.  const 포인터 같은 성격.
int * pRodent = &rats; // 포인터. ## 초기화 불필요.

이 & 는 주소 연산자가 아님. 타입 지시자의 일부..  [char * ; pointer – to – char ]  처럼. [reference – to – int ] 임.

References as Function Parameters

[passing by value] : C 와의 단절..

포인터와 레퍼런스 비교 : 스와핑.

void swapRef (int & a, int & b) { ...  } // 그냥 불러주면 됨.. 훨씬 간결.
void swapPnt (int * a, int * b) { ...  } // 부를 때 ( & theVal .. ) 이런 식이 됨.

Program Notes

..

C++ Prime by Prata Ch. 7 Functions: C++’s Programming Modules

‘function’ :: fun ..ction … ^^
STL & boost C++ …

Function Review

함수 : 정의, 구현, 콜.. 

라이브러리는 함수가 정의, 컴파일 되어 있슴. 

Defining a Function

리턴 : void, value.. 어레이는 “불가”   객체의 일부로 가능 ..

메모리 복사 과정 : 부른 쪽, 함수 쪽..  함수 원형이 부른 함수한테 무엇을 원하는 지 말함.

Prototyping and Calling a Function

Why Prototype ?

함수 인터페이스를 컴파일러에게 알려줌. 

Prototype Syntax

 

C++ Prime by Prata Ch. 4 Compound types

Introducing Arrays

short arrSome[12];
int arrNumb[22 * sizeof(int)]; // 변수는 불가.  항상 type 명시.
int yamcosts[3] = {20, 30, 5}; // create, initialize array
cout << "\nSize of yams array = " << sizeof yams; // 어레이 전체 크기 in bytes.
cout << "\nSize of element = " << sizeof yams[0] ; // int 크기.

인덱스(or subscript)를 통해 access ..

Compound type, Derived type (c 에서)
** class is the bastion of OOP …

Program Notes

초기화 안하면 개비지 값이 들어감.

Initialization Rules for Arrays

int cards[4] = {2, 3, 33, 332};  // 정의와 함께(만) 초기화 가능..
int errArr[3];  // OK
errArr[4] = { 2, 2, 3, 3}  // Error.
errArr = cards;  // Error
float hotelTips[5] = {3.0, 2,2}; // 적은 멤머로 초기화는 가능..  나머지는 0으로 세팅.
short howMany[] = { 1, 2, 333 }; // 3개의 어레이로 초기화.

C++11 Array Initialization

double dropEq[4] { 1e4, 1.6e4, 1.1, 4.88e4 }; // = 없이 가능.
float allEqual[100] {}; // 모든 멤버를 0으로 초기화 가능.
long ppp[] = { 23, 23, 3.3} ; // narrowing...  불가.
char sss[4] { 'h', 'i', 1122011, '\0' }; // narrowing.. 1122011 이 범위 밖..
char sss[4] { 'h', 'i', 112, '\0' }; // 112가 작은 수이므로 가능..

STL 에서는 vector 를 통해 대안 제시.

Strings

1> C-style string.   2> string class
C style : 끝 문자는 ‘널’  .. Ascii value is 0

char dog[3] = { 'b', 'c', 'd' }; // not a string  __ arrays of char..
char dog1[3] = { 'b', 'c', '\0' }; // it's a string

Concatenating String Literals

한 스페이스 ‘ ‘ 사이의 스트링은 하나로 인식..

cout << " some   " "  strings " ;

조인한다고 스페이스를 추가하지는 않음. 단순히 붙이는 역할.

Using Strings in an Array

어레이 사이에 ‘\’ 이 있으면 그 이하는 인식 안 함.. => 중간에 널을 넣어 사용 가능..

char name[15];
cin >> name; // User 인풋..
name[4] = '\0'; // 이러면 그 이전만 인식..

Program Notes (p124)

size 와 strlen 차이점..  스트링 abc 를 담기 위해선 strlen(“abc”) + 1 이 필요.

Adventures in String Input

cin 에서는 스페이스, 탭, 엔터 등을 널로 취급..

Reading String Input a Line at a Time

__

C++ Prime by Prata Ch. 3 Dealing with Data

C++ 의 내장 정수형 : unsigned long, long, unsigned int, int, unsigned short,  short, char, unsigned char, signed char, bool

Climits 파일

const

float, double, long double

cfloat 파일

자동 / 강제  데이터 형 변환

Simple Variables

Bit, Byte

Byte : 8 bit , 16 / 32 bit..

대부분 C++ : short > 16 bit, long > 32 bit.. int > 16, 24, 32 bit..

climits / limits.h 파일 참조.  정수의 한계 정의.

#include <climits>
int maxInt = INT_MAX;
short maxSht = SHRT_MAX;// LONG_MAX,
CHAR_BIT 비트수

Initialization with C++11

int ham  = { 24 }; // ham = 24
int ham {24 }; // same..
int ham = {} ; // set to 0

대안이 왜 필요한가? :: 초보자를 위해서.  {} 은 모든 타입에서 사용 가능.

Unsigned type

한계를 넘어서면 다른 끝으로 감. odometer..

Intiger Literal : 숫자 데이터

명시적으로 쓰는 212, 348 등.
345 : 10진수
012 : 8진수
0x, 0X : 16..

cout << hex; // 다음 출력은 hex 로 전환..
cout << oct; // change output base

How C++ Decides What Type a Constant Is

일반 숫자를 어떤 자료형으로 저장하는가.
> 접미어..  L, UL .. 에 따른다.  LU, UL..  C++11 : LL ll ULL ull  Ull ..
> 너무 크면 다른 형으로..

The char Type: Characters and Small Integers

char :: M, m, 3, …
cin, cout 에서 변환시켜줌..  숫자 -> 캐릭.

cout.put(single char);

A Member Function: cout.put()

OOP .. : dot > membership operator ..

char Literals

‘k’ : ‘ + k + ‘  …
EBCDIC 에서는 65가 A 가 아님.
C++ 의 escape sequence  :: \a > alert,  \n : new line, \” : ‘ ” ‘
cout << endl << ‘\n’ << “\n”    // 모두 new line 기능.
/b : backspace 를 이용하여 ______ 위에 인풋하며 _ 을 지우는 것도 가능..

<br />cout &lt;&lt; "Enter your agent code:________\b\b\b\b\b\b\b\b";<br />long code;<br /> cin &gt;&gt; code;<br />

Universal Character Names

독일어, 불어 등.. \u : 8 hexa , \U : 16 hexa  ISO 10646
\u00F6   ..umlaut o,   \u00E2 ..

signed char & unsigned char

기본이 signed ..는 아님.  unsigned 가 디폴트도 아님.  명시할 필요가 있으면 할 것.

For When You Need More : wchar_t

wide char type.

<br />wchar_t bob = L'P';<br />wcout &lt;&lt; L"tall" &lt;&lt; endl;<br />

New C++11 Types: char16_t & char32_t

char16_t : unsigned 16 bit
char32_t : unsigned 32 bit

<br />char16_t myCh1 = u'q';   // basic character in 16-bit form<br />char32_t = myCh2 = U'\U0000222B';    // universial character name in 32-bit form<br />

The bool Type

true ; 1, false ; 0

The const Qualifier

‘const’ :: qualifier .. 선언의 의미에 대한 자격을 주기 때문.

대문자로 시작. 혹은 모두 대문자로.  k로 시작.

<br />const int kTheValue = 234;  // const type name = value ; 형식..<br />

define 보다 좋은 점 :: 형을 명시할 수 있다. C++ scoping 적용 가능. 어레이 같은 구조에 적용 가능.
Ansi C 에도 있지만 C++와는 약간 상이함.
특히, 어레이의 크기에 const 값 사용 가능.

Floating-Point Numbers

fractional.. 지수로 실수 표현.

Writing Floating-Point Numbers

3.14

3.14E5  (3.14 is mantissa,  5 is exponent)

Floating-Point Types

3 Types :: float (32 bits), double (64 bits), long double (80, 96 or 128 bits)
Significant figures 숫자, 지수 (-37 ~ 37).

Program Notes

3 Types :: float (32 bits), d

Floating-Point Constants

f / F : float
l / L : long double
3.24 / 3.4E8 : double

Advantages and Disadvantages of Floating-Point Numbers

계산이 정확치 않음.

C++ Arithmetic Operators

5개의 연산

Order of operation

* / % 는 같은 등급.

Division Diversions

..

The Modulus Operator

%

Type Conversions

C++ 자동 처리 변환.

# 특정 타잎의 변수에 다른 타잎의 값을 넣을 때.
# 식에서 여러 타잎을 섞을 때.
# 함수에 인자로 넘길 때.

Conversion on Initialization and Assignment

long 에 shot 할당 시 문제 없음.
긴 long 을 float 로 할 때 정확도 잘려나감.. (유효숫자 6개로)

표 3.3 Potential Numeric Conversion Problems

long => short : 아래 바이트들이 카피됨.
0 = true, non zero = false

Inializan Conversions When { } Are Used (C++11)

{ } 를 이용한 list-initialization .. :: narrowing 을 허용 안함. (값이 유실될 때)
즉. float -> integer 허용 안됨.

const int code = 66;
int x = 66;
char c1 {31325}; // narrowing, 불가.
char c2 = {66};  // OK.
char c3 = {code};
char c4 = {x};  // 불가. 상수가 아니라. // 컴파일러에게는 더 큰 수일 수 있음.

Conversions in Expressions

C++ Prime by Prata Ch. 1, 2 Getting Started , Setting Out

Getting Started with C++

Learning C++ : What lies before you

C, Oo, Generic : 세가지 유산.

The origins of C++

C : 절차 지향 ==> 구조화 된 언어로 (if, while etc)..

The c++ shift : OO Programming

객체 지향 : 문제에 촛점을 맞춤.  Bottom-up 방식.
코드 재사용.

C++ and Generic Programming

math.h => cmath : converted C

Namespaces

데이터 타입으로부터의 독립.
OOP 구현 후 generic 접목.
..

Portability and Standards

ANSI 표준.
C++ 98 : Template, STL
C++ 03 : Technical Revision.
K & R C = classic C

Language Growth

C++98 : 800 p, C++11 : 1350 page long.

The Mechanics of Creating a Program

프로그램의 3단계.
텍스트 에디트 -> 컴파일 (object code) -> 링킹 (startup code + library code + object code = 실행 코드)
특수한 경우 :  g++ -std=c++0x use_auto.cpp
유닉스 : c (**.c), C++ (**.C)

Compilation and Linking

cfront : C++ 을 C 로 변환 후 컴파일.. 

Unix Compilation and Linking

cc : cfront  (1993년 버전)
g++
object code : **.o
exe code : a.out

Linux Compilation and Linking

g++ spiffy.cxx -lg++
g++ a.cxx b.cxx c.cxx  // 여러 파일.
g++ a.cxx b.o c.o  // 다시 컴파일 할 경우..

맥 : Xcode g++, clang

Chap. 2. Setting Out to C++

 C++ Initiation

cout << endl;  // start a new line
cin.get();

; : terminator .. not separator

The function header as an Interface

function return type, function name, argument / parameter list
int main() 함수는 블락 끝에서 return 0; 이 생략된 것으로 간주. 메인만..

Why main() by Any Other Name Is Not the Same

The C++ Preprocessor and the iostream File

#include <iostream>
using namespace std;
cin.get();

Header Filename

C++ old style   :  iostream.h
C old style    : math.h
C++ new style  :  iostream
Converted C    : cmath

Namespaces

‘using’ : 지금 받아들이고, 나중에 걱정하는 개념.. (9장 참조)  용어 ::  using directive ..
C++ 에서 여러 벤더의 소스를 쓸 때 중복 함수 피하기 위한 방편.  ::  h 없는 헤더파일에서.

#include <iostream>
using namespace std;  // lazy approach..
using std::cout; // 이것을 더 추천.
cin.get();

C++ Output with cout

” character string 이라 함 ”
<<  ::  스트링을 cout 으로 보낸다.  :: 스트링을 아웃풋 스트림에 집어 넣었다.

<< :: insertion operator ..

The Manipulator   ‘ endl ‘   :: end of line..

The Newline Character   ‘ \n ‘

” escape sequences ” 의 한 예.

C++ Source Code Formatting

Tokens and White Space in Source Code

Token : The  ‘indivisible’  elements in a line of code ..

C++ Source Code Style

.

.

C++ Statements

Declaration Statements and Variables

선언을 통해 적당한 메모리 예약.

C++  에서는 사용하기 전에 선언하는 것이 관례. (파스칼 등에서는 초기에 모두 선언)

Assignment Statements

A New Trick for   ‘ cout ‘

.

 

.

Functions

Return 값이 있는 함수.

라이브러리 관련..  컴파일러마다 다름.
CC sqrt.C -lm  // library math 를 찾아서 컴파일 해라 … (유닉스)