입문_변수설정_datatype_assingdata_shortandnotation_compatibility_literal_escapesequence
-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 * pnStudent—p(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;
}