tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool

Tgool

Computer Science/자료구조

[C++] C언어 및 자바와 다른 부분 기본만 메모

2023. 3. 22. 20:09
#include <iostream> //전처리 지시자
#include <climits> //드래그 후 f12누르면 함수 설명되어 있음. 최대값 정의를 위한 라이브러리
#include <cstring> //strlen() 함수 이용
#define SIZE 20
/*
c++에서 함수를 사용하고자 한다면..?
반드시 그 함수의 원형을 미리 정의하여야 한다.
c++ .h 파일을 안쓰게 됨
*/
void swapA(int&, int&);
void swapB(int*, int*);
void swapC(int, int);

using namespace std;
// std::cout << ""<< std::endl;
// std 생략하게 함

 int main() {

	 //cout 문자열 출력, endl은 줄 바꿈
	 // << 꺽세는 데이터의 방향을 나타냄 
	 cout << "Hello, World!" << endl;

	 // short, int, long, long long
	 // short -32768 ~ 0 32767
	 // unsigned short 0 65534
	 short maxshort = SHRT_MAX;
	 int maxint = INT_MAX;
	 // 큰 문자형은 "" 사용할 수 없음. 
	 //null문자 때문이다. 어디까지 문자의 끝인지 확인하기 위해서 
	 // '\0' 이것이 끝인 의미
	 // '\0' 만날 때까지 탐색
	 // ""은 명시적으로 null 문자 표현 -> string 
	 char a[5] = {'H', 'E', 'L', 'L', '\O'};
	 char b[] = "hell";
	 cout << a << endl;
	
	 //char형 bool형 float형 
	 cout << maxint << endl; 

	 const float PIE = 3.1415926535;
	 //const 상수 선언, #defien PIE 3.141582
	 //const는 값 변경 불가
	 //(int) 형 변환
	 //static_cast<typeName>() only c++ 타입 캐스팅
	 //static_cast<int>(ch)

	 //  >> 두 개의 피연산자가 모두 정수이면 결과값은 몫이다. 

	 // auto n = 100  자동으로 추론해서 int로 타입 선언됨
	 // 근데 잘안씀


	 // 입력
	 int input;
	 //cin은 입력 받는 >> 변수에 저장
	 cin >> input;
	 char input2[15];
	 //cin 입력을 하는 중에 space 나 엔터를 만나면 문자열이 끝났다고 인식
	 // 공백을 포함하여 문자를 받는 법
	 cin.getline(input2, 15); //cin.getline(변수, size크기)  char형만 가능


	 //c++에서 문자열을 다루는 방법
	 //string 에서는 배열을 다른 배열에 통째로 대입할 수 있다.
	 char char1[20];
	 char char2[20] = "jauar";
	 string str1;
	 string str2 = "panda";
	 //char1 = char2; 틀리다
	 str1 = str2; 
	 cout << str1[0] << endl;

	 typedef struct major{
		 int name;
		 int number;
		 float score;
	 }TEST;

	 TEST major2;
	 cout << major2.name << endl;
	 struct major major3;
	 cout << major3.name << endl;

	 major major4;
	 major4.name;


	 //c++ : 객체지향 프로그래밍 
	 //컴파일 시간이 아닌 실행시간에 어떠한 결정을 내릴 수 있다. 
	 //동적 할당 의미

	 //new 연산자 동적
	 /*
	 * 어떤 데이터형을 원하는지 new 연산자에 알려주면,
	 * new연산자는 그에 알맞은 크기의 메모리 블록을 찾아내고
	 * 그 불록의 주소를 찾아낸다
	 */

	 //데이터 객체를 지정하고 있다.
	 int* pointer = new int; // 4바이트를 저장할 수 있는 메모리 블록을 찾아 반환함


	 //delete 연산자
	 /*
	 사용한 메모리를 다시 메모리 풀로 환수
	 환수된 메모리는 프로그램의 다른 부분이 다시 사용
	 */
	 int* p2s = new int;
	 delete p2s;
	 /*
	 delete를 사용하는 4자기 규칙
	 1. new로 대입하지 않은 메모리는 delete로 헤제할 수 없다.
	 2. 같은 메모리 블록을 연달아 두번 delete로 헤제할 수 없다.
	 3. new[]로 메모리를 대입할 경우 delete[]로 해제한다.
	 4. 대괄호를 사용하지 않았다면 delete도 대괄호를 사용하지 않아야한다.*/

	 double* p3 = new double[3]; // double 형 데이터 3개를 저장할 수 있는 공간을 대입
	 p3[0] = 0.2;
	 p3[1] = 0.5;
	 p3[2] = 0.8;

	 cout << "p3[1] is" << p3[1] << ".\n";
	 p3 = p3 + 1; //포인트 주소 1만큼 다음 인덱스로 이동 4바이트 이동 내부적으로는
	 cout << "Now p3[0] is " << p3[0] << "and ";

	 delete[] p3; 

	 char animal[SIZE];
	 char* ps;

	 cout << "동물 이름을 입력하십시오.\n";
	 cin >> animal;

	 ps = new char[strlen(animal) + 1];
	 strcpy(ps, animal);

	 cout << "입력하신 동물 이름을 복사하였습니다." << endl;
	 cout << "입력하신 동물 이름은 " << animal << "이고, 그 주소는 " << (int*)animal << " 입니다." << endl;
	 cout << "복사된 동물 이름은 " << ps << "이고, 그 주소는 " << (int*)ps << " 입니다." << endl;
	 
	 
	 //함수를 지시하는 포인터가 함수 포인터
	 // 어떠한 함수에 함수의 주소를 매개변수로 넘겨주는 경우 유용하게 사용할 수 있따.
	 int (*pf)(int);
	 //pf =func;
	 //(*pf)(3)

	 //인라인 함수
	 /*
	 일반적으로 함수의 호출은 함수의 주소로 점프하는 과정
	 인라인 함수는 컴파일된 함수 코드가 프로그램의 다른 코드에 삽입
	 컴파일러의 인라인 함수 호출 = 점프가 아닌 그에 대응하는 함수 코드로 대체*/
	 //함수의 원형 부분 앞에 inline float square(float x) {return x *x } 람다식 같네

	 //디폴트 매개 변수
	 // 함수의 원형 부분에서 정의

	 /*
	  int sumArr(int *, int n = 1) 이렇게 하면 n 값이 없으면 n = 1이 들어감
	  int sum = sumArr(arr) n=1이 들어가서 작동 함
	  버그 예방 유리 인자 위치는 가장 오른쪽에 선언/
	  */

	 //참조(reference)란?
	 // 미리 정의된 변수의 실제 이름 대신 사용할 수 있는 대용 이름
	 // 함수의 매개변수에 사용
	 // 즉 복사본이 아닌 원본 데이터를 제공
	 //참조 연산자 선언 
	 //int a;
	 //	int& b = a;
	 int wallet1 = 100;
	 int wallet2 = 200;

	 cout << "최초 상태" << endl;
	 cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	 cout << "참조를 이용한 값의 교환\n";
	 swapA(&wallet1, &wallet2);
	 cout << "참조 교환 이후 상태\n";
	 cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	 cout << "포인터를 이용한 값의 교환\n";
	 swapB(&wallet1, &wallet2);
	 cout << "포인터를 이용한 교환 이후 상태\n";
	 cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	 cout << "값을 이용한 값의 교환\n";
	 swapC(&wallet1, &wallet2);
	 cout << "값을 이용한 교환 이후 상태\n";
	 cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;
	 return 0;
	 
	 
	 //함수 템플릿
	 //구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의 
	 //함수 원형 부분에 
	 /*
	 template<class Any>
	 Any sum(Any a, Any b, int c) {
		 return a + b;
	 }
	 */
     // #ifndef STRUCT

	// #endif
	 //STRUCT라고 묶여있는 다른 헤더파일에 구문들이 정의되어 있다면 묶여있는 것들 무시 후 컴파일
     // 연산자 오버로딩
	 //클래스 파괴자 ~
	 // C++ friend 
	 // << 오버로딩 두 개의 피연산자 필요해서 프렌드 필요
	 // 동적 결합
}
void swapA(int& a, int& b) {
	int temp;

	temp = a;
	a = b;
	b = temp;
}

void swapB(int* a, int* b) {
	int temp;

	temp = *a;
	*a = *b;
	*b = temp;
}

void swapC(int a, int b) {
	int temp;

	temp = a;
	a = b;
	b = temp;
}

 

'Computer Science > 자료구조' 카테고리의 다른 글

테스트  (0) 2023.03.08
[CS50] 2진법  (0) 2023.02.08
    'Computer Science/자료구조' 카테고리의 다른 글
    • 테스트
    • [CS50] 2진법
    tgool
    tgool

    티스토리툴바