Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

SYDev

[객체지향프로그래밍] 2주차 정리 본문

3학년 1학기 전공/객체지향 프로그래밍

[객체지향프로그래밍] 2주차 정리

시데브 2024. 3. 12. 20:20
경희대학교 컴퓨터공학부 이대호 교수님의 객체지향프로그래밍 수업 자료를 참고한 정리본

 

 

Values and Variables

#include <iostream>

using namespace std;

int main() {
    cout << 4 << endl;
    cout << "4" << endl;    //string, 문자열
    cout << '4' << endl;    //character, 문자형
    cout << "4\n";
    cout << 4/2 << endl;
    cout << "4/2" << endl;
    cout << "4/2" << '\n';  // \n은 하나의 문자로 인식
    
    cout << 5/2 << endl;
    cout << 5/2*2 << endl;  //앞에서부터 순서대로 연산
    cout << 2*5/2 << endl;
    cout << 1'234 << endl;  //숫자 구분 연산자
    
    int x;
    x = 10;
    
    //32bit integer의 최댓값인 -21억을 넘어가면, 다시 최댓값으로 돌아가서 범위 내에서 값을 가짐
    cout << -3000000000 << endl;    //64bit integer
    cout << (x=-3000000000) << endl; // 32bit integer (- 2,147,483,648 ~ 2,147,483,647)
    
    int a = 10; //declaration & assignment 동시에 선언 및 초기화(initialization)
    int b{10};
    int c{20};
    
    return 0;
}
4
4
4
4
2
4/2
4/2
2
4
5
1234
-3000000000
1294967296
101020
Program ended with exit code: 0

 

선언과 정의(declaration & definition)

  • 메모리를 할당하지 않고, 대상의 이름만 알려주면 선언
  • 대상의 메모리가 할당된다면 그것은 정의
void main()
{
    int a;         // 변수의 선언과 동시에 정의
    int b = 10;    // 마찬가지..
}

 

선언

extern int a;	//전역변수의 선언

int add(int a, int b);	//함수의 선언(함수는 본문이 x)

class ClassID;	//클래스의 선언

class c1;	//전방 선언
class c2 {
private:
	static c1 member;
    //클래스 내의 정적 객체는 클래스 외부에서 정의
    //때문에 member를 선언하는데 c1의 정의를 알 필요가 X
};

 

정의

int a;	//변수의 정의1
int b = 10;	//변수의 정의2

int add(int a, int b) {
	//함수의 정의 (함수 본체가 존재)
    return a + b;
}

struct C {
	//구조체의 정의
    int a;
    int b;
};

class D {
	//클래스의 정의
    int a;
    int b;
};

 

https://banaba.tistory.com/41

 

선언과 정의(declaration and definition)

0. 개요프로그래밍에서 선언(declaration)과 정의(definition)는 명백히 다른 역할을 하지만 혼동하여 사용하기 쉽습니다. 선언과 정의의 가장 큰 차이는 "메모리를 할당하는가" 입니다.메모리를 할당

banaba.tistory.com

 

Identifiers

  • 식별어
  • Identifiers -> 최소 1개의 문자를 포함
  • 첫 번째 문자는 알파벳 문자 (대문자 혹은 소문자 혹은 _)
  • 두 번째 문자부터는 알파벳, _ 숫자
  • 다른 characters 허용 X
  • 예약어는 식별어로 사용 X -> int, struct, namespace, ...

 

Additional Integer Types

  • short int(16 bit) <= int <= long int(32 bit) <= long long int(64 bit) -> 컴파일러나 머신에 따라서 같을 수 있음
  • unsigned short <= unsigned <= unsigned long <= unsigned long long
  • short int (short) 2bytes -32,768~32,767
  • int, 4bytes, -2,147,483,648~2,147,483,647
  • long int (long), 4bytes -2,147,483,648~2,147,483,647
  • long long int (long long), 8bytes -9,223,372,036,854,775,808~9,223,372,036,854,775,807
  • unsigned short int (unsigned short), 2bytes 0~65,535
  • unsigned int (unsigned), 4bytes 0~4,294,967,295
  • unsigned long int (unsigned long), 4bytes 0~4,294,967,295
  • unsigned long long int (unsigned long long), 8bytes 0~18,446,744,073,709,551,615

 

  • int x = 4456;
  • int x = 4456L(or l); -> long
  • int x = 4456LL(or ll); -> long long
  • 정수형 값 앞에 0x 붙이면 16진수(hexadecimal) -> 0xFF = 15*16 + 15 = 255
  • 정수형 값 앞에 0 붙이면 8진수(octal) -> 010 
  • 0b -> 2진수

-> 8, 16, 32, .. bit 

-> u 붙으면 unsigned

 

#include <iostream>

using namespace std;

int main(void) {
    cout << 3000000000LL * 3000000000LL << endl;
    cout << 3000000000L * 3000000000L << endl;
    cout << 10 << endl;
    cout << 010 << endl;
    cout << 0X10 << endl;
    cout << 0b10 << endl;
    
    return 0;
}
9000000000000000000
9000000000000000000
10
8
16
2
Program ended with exit code: 0

 

Floating-point Types

  • float, 4bytes, 1.17549×10-38, 3.40282×10+38, 6digits -> 10진수로 봤을 때 약 6자리 저장하지만, 저장 가능한 범위는 크다.
  • double, 8bytes, 2.22507×10-308, 1.79769×10+308, 15digits -> 15자리
  •  
  • long double, 8 (12, 16)bytes, 2.22507×10-308, 1.79769×10+308, 15digits (10-4932, 10+4932)

-> 부호 저장 자리 하나, A 저장 자리 하나, 나머지 B 저장자리

 

#include <iostream>
//전처리문이므로, 컴파일하기 전에 PI를 지정 -> 컴파일할 때, PI라고 적힌 것을 3.14159로 수정한 다음 컴파일
//3.14159 뒤에 세미콜론을 붙이면 PI 위치에 3.14159; 가 그대로 생기기 때문에 PI가 문장 끝에 있지 않은 경우, 컴파일 오류 발생
//따라서 define할 때, 연산도 신경써서 괄호를 붙이는 것이 나음
#define PI (3 + 0.14159)


using namespace std;

int main(void) {
    double pi = 3.14159;
    cout << "Pi = " << pi << endl;
    cout << "or " << 3.14 << " for short" << endl;
    
    const double avogadros_number = 6.022e23, c = 2.998e8;
    cout << "Avogadros number = " << avogadros_number << endl;
    cout << "Speed of light" << c << endl;
    
    const double x = 1.2e3;
    cout << x << endl;
    
    const double y = 1.2345678;
    cout << y << endl;  //1.23457이 출력되는데, 이는 y가 변한 게 아니고 cout에서 자릿수가 많으면 자동으로 반올림해서 출력하는 것

    cout << 2 * PI << endl; //define PI할 때, 끝에 ;를 붙이면 cout << 2 * 3.14159; << endl; 형태가 돼버림

    return 0;
}
Pi = 3.14159
or 3.14 for short
Avogadros number = 6.022e+23
Speed of light2.998e+08
1200
1.23457
6.28318
Program ended with exit code: 0

 

Characters

  • 아스키코드를 기본으로 사용, 128개의 문자
  • 알파벳 대문자, 소문자, 숫자, 줄바꿈 문자 등의 특수문자 등등
#include <iostream>

using namespace std;

int main(void) {
    char ch1, ch2;
    ch1 = 65;
    ch2 = 'A' + 1;  //char + int의 결과는 int
    cout << ch1 + 2 << ", " << 'A' << endl;
    
    char ch = '0' + 2;
    cout << ch << ", " << 0 + 2 << endl;
    cout << '0' + 2 << ", " << 0 + 2 << endl;   //'0'은 아스키코드 48번
    
    return 0;
}
67, A
2, 2
50, 2

 

  • '\n'—the newline character
  • '\r'—the carriage return character
  • '\b'—the backspace character
  • '\a'—the “alert” character (causes a “beep” sound or other tone on some systems)
  • '\t'—the tab character
  • '\f'—the formfeed character
  • '\0'—the null character (used in C strings, see Section 11.2.6)
  • '\\'. -> 역슬래쉬 char 쓰려면 두 번 입력
  • std::cout << "C:\\Dev\\cppcode" << '\n';

 

Enumerated Type

  • 나열형
#include <iostream>

using namespace std;

int main(void) {
    enum Color { Red, Orange, Yellow, Green, Blue, Violet };    //0, 1, 2, 3, 4, 5의 값을 갖게 됨
    cout << Red << Orange << Yellow << endl;
    
    enum Animal { Cat = 1, Dog, Puppy = 2 };
    cout << Cat << Dog << Puppy << endl;
    
    enum class Shade { Dark, Dim, Light, Bright };
    enum class Weight { Light, Medium, Heavy };
    Shade color = Shade::Light;
    Weight mass = Weight::Light;
    
    cout << (int)color << " "<< (int)mass << endl; //(int) 없으면, cout에서는 Shade라는 자료형을 이용해서 정의하지 않았기 때문에, 컴파일 오류
    
    return 0;
}
012
122
2 0

 

 

int y = 3;
double x = (double)y/2;

-> 해당 연산은 double이 더 범위가 넓으므로, 결과값이 double

 

Type Inference with auto

auto count = 0;
auto ch = 'Z';
auto limit = 100.0; // auto x;