-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은 의미가 없다.

-c++은 객체지향(object oriented) 프로그램이다.

>c는 앞에서부터 실행하지만 객체지향은 객체에 일을 시킨다.

 

-low level & high level language

low lever  assembly, machine

high level  c,c++,java(java는 객체지향이다.)

 

-우리가 사용할 tool visual studio 2017 community이다.

 

-변수 설정

>변수는 기본적으로 의미있는 이름으로 지어라.

>변수는 소문자로 시작해라 (int nStudent)

>함수는 대문자로 시작해라 (Count Student())

>상수는 대문자만 이용해라 (PI=3.1415..)

>포인터는 변수 앞에 pn을 붙인다. (int * pnStudentp(pinter)n(number))

 

-data type

int 정수

float 소수

double 실수

char 문자

bool 부울대수

 

-Assigning data

데이터 할당.

만약 데이터할당ᅟᅳᆯ 하지 않으면 결과로“undefined”가 뜬다.

int a=10;

-Lvalues(좌측값),Rvalue(우측값)

(distance = rate * time;
Lvalue: "distance"
Rvalue: "rate * time" )

-shortand notation

count += 2;

count = count + 2;

total -= discount;

total = total-discount;

bonux * = 2;

bonus = bonus *2;

time / = rushfactor;

time = time/rushfactor;

change % = 100;

change = chane % 100;

amount * = cnt1 + cnt2

amount = amount * (cnt1 + cnt2);

 

-compatibility(적합성) of data assignments

:기본적으로 한가지 타입의 변수에 다른 타입의 것을 저장하는 것은 불가능하다.

예를 들어

int intV;

intV=2.99;

를 대부분의 컴파일러들은 거부할 것이다. 이러한 것은 type mismatch라 한다.

상수 2.99. double이다. 그리고 intV int type이다.

불행하게도 모든 컴파일러들이 이전할당서술방식을 동일하게 반응할 것은 아니다.

몇몇은 에러메세지를 주고 몇몇은 경고메세지만 준다. 몇몇 컴파일러들은 모든 것을 거부하지는 않을 것이다.

비록 컴파일러들이 너에게 이전 할당을 사용하라고 허락하더라도 그것은 intV에 정수값 2를 주는것이지 3을 주는 것은 아니다. 한가지 타입의 변수 할당을 다른 타입으로 전환하는 것을 허락하는 대에는 몇몇의 특별한 케이스가 있다. 예를들어 int double 같은 소수를 할당하는 것이 받아들여진다. 예를들어 두가지 스타일을 보자

double doubleV;

doubleV=2;

위의 것은 doubleV라는 변수에 2.0을 셋팅한것과 동일하다

#위의같이 자동으로 변경되는 것을 implicit. 또는 automatic type conversion이라 한다.

비록 저렇게 한다는게 좋지는 못하더라도 너는 다양한 형식의 char 54와같은 int형 변수를 넣을 수 있고 int형 변수에 z를 넣을 수 있다. 여러 가지 목적으로 c언어는 char int보다 작도록 여기며 불행히도 c++은 이를 물려받았다. 이것을 허락한 이유는 char형 변수는 int형 변수보다 메모리를 적게 차지하기 때문이다. 따라서 char형으로 산수를 진행하는 것은 메모리적으로 아낄 수 있다. 그러나 너가 정수를 대할땐 int, 그리고 글자를 대할때는 char을 쓰는 것이 깔끔하다.

보편적인 규칙으로 당신은 한가지 타입의 변수에 다양한 다른 타입을 둘수는 없다. 비록 컴파일러들이 이러한 룰들을 강요하지는 않더라도 이런 것들은 따라야 한다.

컴퓨터 프로그래밍에서도 형 변환(type conversion)은 중요합니다.

- 정수형 자료  실수형 자료

#include <iostream>

using namespace std;

int main()

{

int numTest;

numTest = 97.3999;

cout << numTest;

return 0;

}

실행시 97나온다.

 

- 실수형 자료  문자형 자료

- 아스키 문자형(multi-byte character set)  유니코드 문자형(wide character string)

 

실습1.

#include <iostream>

using namespace std;

int main()

{

char numTest;

numTest = 'a';

cout << numTest;

return 0;

}

실행시 a (이때 문자열은 “‘으로, 한글자는 ’‘로 묶는다. ’‘ 안에 여러 단어를 넣게되면 맨마지막 글자만 인식한다.

 

#include <iostream>

using namespace std;

int main()

{

int numTest;

numTest = 'a';

cout << numTest;

return 0;

}

실행시 97이 나온다.. 이는 implicit은 아닌거같다...

 

 

 

-Literals(문자 그대로의)

literal은 특정 값이다. literal constants로 불리기도한다.. 이는 변하지 않는값이다.

literal= 23,200,3.23,“hello” 이며 int a = 7;에서 a는 변수이고 7 literal이다.

const int b = 8에서 b const.즉 상수이고 8 literal이다.

 

-Escape Sequence

백슬래시 다음에 오는 문자나 숫자 조합이다. 단일 문자로 간주되므로 문자 상수로 사용할 수 있다. 일반적으로 탭이동 같은 동작을 실시한다. 화면에 표시되지 않는다. 대표적으로 \n 이 있다.

 

실습

#include <iostream>

using namespace std;

int main()

{

int numIN;

cout << "hello\n"

<< "how many language do you learn??" << endl;

cin >> numIN;

if (numIN < 2)

cout << "study hard";

else

cout << "good";

return 0;

 

 

}

 

-constants

1.상수 변수

일반적인 변수는 const가 없이 int in~이런방식.. 초기화를 해도되고 안해도 된다.

const..상수는 onst로써 초기화를 해준다.

상수를 사용하는 이유는?

1)상수만이 매개변수로 가능한곳....

array를 선언하려면

int npArray[3];

고칠 때 불편하므로

-const 

int nsize =3;

int npArray[nSize];

2)변경하고 싶지 않은 변수

const int nsize=3; -->아래 다른쪽에서 변경을 못하게 막아준다.

nsize=5; -->에러발생....값을 바꾸려는 실수를 못하게 하기위하여 사용한다

 

하지만 상수의 용법은 한가지만이 아니다.!-나중에 배우는 #상수 매개변수(파라미터안에 const int... , 상수함수.. ㅅㅇ수를 함수로 만든다...마지막으로 상수리턴이있다!!)

 

 

 

-arithmetic precicision(고정밀도 연산)

업그레이드를 갑자기 해주면 좋다...ex)호텔...

type mismatch를 할 때

compatible 한 경우

up casting

down casting

아니면 error

upcasting을 먼저하고 안되면 down casting... compatible하지 않으면 error을 준다.

17.5/5 ..인 경우

17로 바꾸는게 downcasting이다.

5 5.0으로 해주는게 upcasting이다.

이런경우라면

17.5/5.0으로 up casting을 먼저해준다.

 

//

 

#include "iostream"

using namespace std;

 

int main()

{

//문자에 정수를 더해도 인식

char a = 'z';

a = a - 1;

cout << a;

 

for (char i = 'a'; i <= 'z'; i++)

{

cout << i;

}

 

cout << endl;

 

//정수에 실수를 더해도 인식. 이때 실수는 내림하여 정수꼴이되어 사용됨

double b = 1.1;

int c = b + 1;

cout << c << endl;

//실수에 정수를 더해도 잘 인식함.

int d = 1;

double e = b + 2.2;

cout << e << endl;

//정수에 문자를 더해도 인식.

int f = 1;

f = f + 'a';

cout << f;

 

return 0;

}

 

 


 

'언어 > 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
상수_shorthand++_console_출력포메팅_커맨트  (0) 2017.12.24

+ Recent posts