-Constants
1.상수변수
일반적인 변수는 int <변수> 의 방식으로 초기화를 한다.
*매개변수는 정의에 사용되는 변수이며 인수는 그러한 변수에 실제로 들어가는 값이다.
def plus(a, b):
return a + b
정의하고 a, b는 매개 변수라 하며 사용은
c = 5
plus(4, c)
여기서 4, c를 인수라 한다.
const 상수는 const를 사용화여 초기화 한다.
1)상수만이 매개변수로 들어가는 공간이 존재한다.
EX) 배열을 의미하는 array
const int array1 = 10;
int aa[array1]; 의 경우 오류가 생기지 않지만
int array1 = 10; 으로 할 경우 상수가 들어가야한다는 오류메시지가 뜨며 컴파일 오류가 생긴다.
2)변경하고 싶지 않은 변수
const로 변수선언을 하게되면 상수처리가되어
const int con1 = 10;
con1 = 20;
이렇게 하면 오류가 생긴다
이외에도 상수 매개변수, 상수리턴, 상수 함수가 있다.
arithmetic precision ( 연산 정밀)
-type mismatch 시 compatible(호완이 될) 경우
1.up casting
ex) 17.5/5 -->5를 5.0으로 실수처리해줌
2.down casting
ex)17.5/5 --> 17.5를 17로 처리함
3.erroe message
중 한가지를 한다.
그렇다면 계산시 명확하게 하고자 하려면 어떻게 해야할까?
explict 하게 type casting 하자.(not implicit)
17,5/(double)5 -->이런식으로!
예상치 못한 상황이 발생 할 수 있다.
(1/2/3.0/4=0 이다.. 1/2=0이되어 계산이 진행됨
-shorthand operator s
-increment operator(++)
decrement operator(--)
(포문에서 많이 사용된다.)
-post->intvar++
->문장 이후헤 적용된다,
pre->++intvar
->문장 실행전에 적용된다.
n=2
val=2*(n++);
cout << val
cout << n
컴파일시 ->4,3
n=2
val=2*(++n);
cout << val
cout << n
컴파일시 ->6,3
-console I/O
cin, cout, cerr, object 등을 사용하기 위해서는
#include <iostream>을 이용해야한다.
이는 c++ library에 있다.
using namespace std;
std라는 성을 사용하겠다. 즉 이를 통하여 앞에 std를 써야하는 것은 생략하여도 명령어가 실행되도록 한다.
cout : 아웃풋 출력
cerr : 에러 출력
운영 체제 리디렉션이 cout에는 작용하지만 cerr에는 작용하지 않는다는 것이다. cerr 객체는 에러 메시지를 위해 사용된다. 그러므로 프로그램 출력을 파일로 리디렉션할 때 에러가 발생하면, 화면에 에러 메시지가 나타난다.
-console output
-변수,상수,문자,expression 등 어떤것이던 output 될 수 있다.
-cout << “abcd” << “efgh”
이런식으로 할 때 출력 가능한이유는??
사람들은 함수의 이름을 cout 이라 생각하지만 함수의 이름은 << 이고 cout 은 객체 이름이다.
즉 << 라는 함수은 cout 과 abcd 라는 매개 변수를 받아 두 번째 매개변수를 첫 번째 매개변수로 쏘아준다. cout 은 cout 이란 포트로 쏘아주는 것이다.
그러면 cout은 이를 출력한다. 그리고 캐스캐이딩을 통해 cout을 다시 리턴으로 돌려준다.
그러면 그다음에 cout을 다시 사용 가능하다.
캐스케이딩 : 입력포트를 출력으로 리턴한다! (return cout; 하면 cout 이 다시 리턴된다)
*객체와 인스턴스란?
기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이다. 실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다. 같은 성질(구조와 형태)을 가지는 객체는 등급으로 정의하고, 같은 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.
-Separating lines of output
cout << “\n”
or
cout << “” << enl
두 방식다 라인을 나눠준다.
-출력 포매팅
c는 %d, %f 식으로 변수를 output 하여 주었다
하지만 c++ 은 기본적으로 operator overloading 이 기본적인 특징이다.
즉 c++은
<<(port,int)
<<(port,double)
<<(port,string) 이 내장되어 있다.
따라서 right value 에 int 가 있으면 오퍼레이터로 int를 갖는 함수,
string 이면 오퍼레이터로 string
double 이면 오퍼레이터로 double을 갖게 된다.
이를 내부에서 알아서 잡아주어 출력한다.
하지만 double로 쓰되 나머지를 내가 원하는 수만큼 표현하고싶다면 다음곽 같이 지정하여 줄 수 있다.
EX) 소수점 셋자자리 까지만 보고싶다면?
#include<iostream>
using namespace std;
int main()
{
double price;
price = 78.5;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(3);
cout << price;
return 0;
}
의미는
출력 포메이팅이
00000000이런식으로 되어있을 때
00001(fixed.flag변수로 고정)00001(showpoint.보여지는값설정)00 이런식으로 하고
precision(3) 으로 세 번째 자리까지라 고정한다.
|
ios::showpoint |
0x0100 |
소수점을 보임(부동 소수점 전용) |
|
ios::fixed |
0x1000 |
부동 소수점 표시 사용(1234.5) |
*부동 소수점-c에서 수를 저장할 때 13.245 같은 것을 1.3245e-1승 같이 표현하여 저장함.
13.245자체는 고정 소수점이다.
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
이것은 |, 즉 or 의 특성을 이해하면 밑에와 같이 써도 무방하다.
cout.setf(ios::fixed | ios::showpoint);
-커멘트
드래그후 상단의 주석버튼을 눌러도 되고
구간 -> /* <내용> */ 으로 하거나
행 -> //<내용> 을 통하여 주석처리 해도된다.
-연산자
()-->함수 call
++,-- : post fix ...
int n=3;
n++;
이때 ++는 n과 딱 붙어있다. 따라서 가깝다.
-->즉 내몸의 일부가 가장가깝고 나한테 붙어 일을하는애들이 가깝다.
k=+n;
-n;
이렇게 부호를 바꾸는것도 자기의 몸과 가깝다.
int n;
&n; ->나의 주소값도 나와 붙어있다.
-->여기까지 연산이 한 개짜리. 나한테 한 개의 operand를 요구한다.
2 of 4
이제 산술연산자가 나온다.
3of 4
비교연산자가 나온다.
4of4
논리연산자
산-비-논
최후의 수단은 괄호 치기!
&n++;
주소는 그대로이다.
shor circuit evaluatuin
논리연산자는 첫 번째 조건이 ture이면 || 는 우측을 실해하지 않는다.
이렇게 끝까지 계산을 안하는 것을 short circuit.
(false && )..이것이 중요한 이유는
이는 if(x>1)
{
y++;
}
x>1 && y=c
x>1이면 y=c를 할당한다.!
즉 if 문과 동일하다.
int값을 boolen value
사람들은 보통 양수는 true 라고 생각한다.
if(x) --x>0이면 true
그렇다면 0,음수는..?
negative 도 true이다.
유일하게 0만 false이다.
흔하게 하는 오류는
if(x=y) 의도는 비교를 하고싶었지만(==)
{
}
-->컴파일시 에러가 나오지않는다. 실행해도 에러가 나오지않는다.
increment는 자기랑 붙어있는곳에서 먼저한다.
뒤쪽에 있는 것은 shorthand이다.
이줄을 실행한다. n++은 그 다음줄로 생각해서 한다.
input 과 output은 산술연산자다음이지 산술연산자가 아니다.
branching mechanisms— 중요
if-else
일반적으로.. if else
for
while
바로 다음줄을 한 개의 body로 인식한다.
if(x>3)
y=4;를 실행한다.
z=4;
이때 z=4; 는 body가 아니다.
바디는 반드시 묶어준다.
한줄임을 표시해주는 것은 {} 라는 중괄호를 사용한다.
귀찮더라도 한줄이라도 중괄호를 쓰는 것이 중요하다.
y=3;z=4; 는 두줄이다.
netsted statement
if
else if
else if
else
이런 형태가 가장흔하다.
원래대로 쓴다면
if()
else_
if_
..이런식으로 한다면 보기 좋지 못하기 때문에
if
else if 로 한다.
elseif를 한단어로 생각하지 말자.
실제로 c나 c++ 의 tab. 즉 intentation은 의미가 없다.
'언어 > CPP(cpp)' 카테고리의 다른 글
| overloading(오버로딩),default (0) | 2017.12.25 |
|---|---|
| 가위바위보랜덤게임코드작성 (0) | 2017.12.25 |
| Function (0) | 2017.12.25 |
| switch_loop_case_if_ternary_inline_comma (0) | 2017.12.24 |
| 입문_변수설정_datatype_assingdata_shortandnotation_compatibility_literal_escapesequence (0) | 2017.12.24 |