profile image

L o a d i n g . . .

반응형

변수와의 첫 만남

객체(objects): 메모리에 저장이 돼 있는 정보가 객체로써 존재함

변수(variables): 수학에서 얘기하는 변수처럼 기능하나, 내부적으로 작동할 때는 메모리에 담겨 있는 객체의 이름

Left-values / Right-values: 메모리 변수에 직접 접근할 수 있느냐

초기화(initialization)와 대입(assignment)

초기화를 안 했을 때의 문제점

#include <iostream>

int main()
{
	int x;		// X: 메모리에 있는 어떠한 공간의 이름, 정수 하나 담을 크기(integer)
	x = 123;	// =: assignment operator, '대입'
	x = x + 2;	// 우측의 x는 R-value

	std::cout << x << std::endl;
	std::cout << &x << std::endl;	// ampersand

	int y = 123;	// initialization
	//int y(123); 가능
	y = 5;			// assignment

	return 0;
}

 

Release 모드에서는 컴파일러가 초기값을 넣어 준다.

메모리는 공유된다. 새로 할당받았다고 생각하지만, 쓰레기(Garbage) 값이 들어가 있을 수 있다.

프로젝트가 커진 경우에는 찾기가 힘들다. 변수는 항상 초기화를 하자!!!

#include <iostream>

int main()
{
	int x = 1;
	x = x + 2;
	std::cout << x << std::endl;		 // #1
	// 출력: 3

	int y = x;
	std::cout << y << std::endl;		 // #2
	// 출력: 3

	// is (x + y) l-value or r-value? => r-value
	std::cout << x + y << std::endl;	 // #3
	// 출력: 6

	std::cout << x << std::endl;		 // #4
	// 출력: 3

	int z;
	std::cout << z << std::endl;		 // #5
	// 빌드 오류가 난다... 선생님은 하셨는데 나는 왜 안 되는지 잘 모르겠음

	return 0;
}

 

 

입출력 스트림과의 첫 만남 cin, cout

cin: console in

cout: console out

endl: end line

 

endl 유/무

 

#include <iostream>	// cout, cin, endl...
#include <cstdio>	// printf

int main()
{
	int x = 1024;
	double pi = 3.141592;

	// cout, endl 등의 함수는 std라는 이름공간 안에 정의되어 있다.
	// 그 안에 있는 것을 사용하기 위하여 콜론 두 개(::)를 넣어 준다.
	// <<: output operator, 출력하고 싶은 내용이 스트림을 타고 cout으로 들어간다.
	std::cout << "I love this lecture!" << std::endl;
	std::cout << "x is " << x << " pi is " << pi << std::endl;

	// \t: tab, 어떠한 기능을 수행하는 문자
	// \n: new line
	std::cout << "abc" << "\t" << "def\n\n" << std::endl;
	std::cout << "ab" << "\t" << "cdef\n" << std::endl;

	// namespace 사용을 선언하면, 해당 namespace 이름을 생략해도 컴파일러가 처리한다.
	using namespace std;
	cout << "without std" << endl;

	// \a: audio 소리 출력
	cout << "\a";


	int y = 1;
	cout << "Before your input, y was " << y << endl;
	// >>: input operator, 입력받은 내용이 스트림을 타고 해당 변수로 들어간다.
	cin >> y;

	cout << "Your input is " << y << endl;

	return 0;
}

 

 

함수와의 첫 만남

함수(function)

리턴값(return values)

매개변수(parameters)

인수(arguments)

 

함수 이름을 변경하고 싶을 때, 함수 이름 우클릭 시 rename 메뉴가 존재한다. 해당 기능을 이용하여 함수 이름을 변경하면, 호출된 모든 코드에서 변경된 함수 이름을 직접 수정할 필요가 없어진다.

함수를 실행시킬 때, 메모리에 저장되어 있는 함수를 load해서 가져온다.

#include <iostream>

using namespace std;

// 반환형 함수이름(매개변수,parameter)
// 함수 이름 변경 - 함수 이름 우클릭 Rename...
int multiplyTwoNumbers(int num_a, int num_b)
{
	// 덧셈을 곱셉 등으로 변경하고 싶을 때, main 함수가 아니라
	// 해당 함수의 코드만 수정하면 된다.
	// ex) int sum = num_a - num_b;
	int sum = num_a * num_b;

	return sum;
}

// return 할 것이 없기 때문에 반환형은 void
void printHelloWorld()
{
	cout << "Hello World " << endl;

	return; // return을 만나면 무조건 반환해서 main 함수로 돌아간다.

	cout << "Hello World 2" << endl;
}

void print()
{
	cout << "Hello" << endl;
}

int addTwoNumbers(int a, int b)
{
	/*
	cpp는 함수 안에서 함수를 정의할 수 없다.
	void print()
	{
		cout << "Hello" << endl;
	}
	*/
	print();
	return a + b;
}

int main()
{
	/*
	숫자 두 개를 더하고 그 결과를 출력하는 패턴이 반복되고 있다.
	cout << 1 + 2 << endl;
	cout << 3 + 4 << endl;
	cout << 8 + 13 << endl;
	*/

	// 함수이름(인수,argument)
	cout << multiplyTwoNumbers(1, 2) << endl;
	cout << multiplyTwoNumbers(3, 4) << endl;
	cout << multiplyTwoNumbers(8, 13) << endl;

	printHelloWorld();

	int sum = addTwoNumbers(1, 2);

	return 0;
}

 

이래저래 각색해서 풀어 본 연습 문제!

// 두 개의 정수를 입력받아서 더하고 출력하는 함수를 만들어 보자.
// 1. main 입력 + 반환하는 함수
// 2. main 입력 + 출력하는 함수
// 3. 입력받는 함수 + 출력하는 함수
// 4. 3번을 여러 번 반복되게끔

#include <iostream>

using namespace std;

int addTwoNumbersReturn(int num_a, int num_b)
{
	return num_a + num_b;
}

void addTwoNumbersPrint(int num_a, int num_b)
{
	cout << "입력한 정수: " << num_a << ", " << num_b << " / 덧셈 결과: " << addTwoNumbersReturn(num_a, num_b) << endl;
}

void addTwoNumbersAll()
{
	// 포인터 개념은 사용하지 않았다.
	int a, b;

	cout << "두 정수를 입력하세요." << endl;
	cin >> a >> b;
	addTwoNumbersPrint(a, b);
}

int main(void)
{
	int a = 0, b = 0;

	cout << "[1. main 입력 + 반환하는 함수]" << endl;
	cout << "두 정수를 입력하세요." << endl;
	cin >> a >> b;
	cout << "입력한 정수: " << a << ", " << b << " / 덧셈 결과: " << addTwoNumbersReturn(a, b) << endl;


	cout << "\n\n[2. main 입력 + 출력하는 함수]" << endl;
	cout << "두 정수를 입력하세요." << endl;
	cin >> a >> b;
	addTwoNumbersPrint(a, b);

	cout << "\n\n[3. 입력받는 함수 + 출력하는 함수]" << endl;
	addTwoNumbersAll();

	cout << "\n\n[4. 여러 번 반복하기]" << endl;
	// 반복문 개념은 사용하지 않았다.
	addTwoNumbersAll();
	addTwoNumbersAll();
	addTwoNumbersAll();

	return 0;
}

 

 

키워드와 식별자 이름짓기

메모리 주소를 프로그래머가 인식할 수 있는 이름으로 바꿔 준다.

 

C++ 키워드(예약어)

https://en.cppreference.com/w/cpp/keyword

 

C++ keywords - cppreference.com

This is a list of reserved keywords in C++. Since they are used by the language, these keywords are not available for re-definition or overloading. (1) - meaning changed or new meaning added in C++11. (2) - meaning changed in C++17. (3) - meaning changed i

en.cppreference.com

 

 

변수명은 너무 길지 않으면서도 의미를 충분히 표현할 수 있는 것이 베스트!

변수명은 띄어 쓸 수 없기 때문에, 언더바(_)를 사용한다.

void GetNumber()
{
	// 무슨 기능을 하는지 설명할 때 보통 동사+명사
	// 첫 글자는 대소문자 무관함, 같이 하는 사람들에게 맞춰서 하기
	// 함수명이 길어질 수밖에 없는 경우, 짧게 하고 주석을 달아 놓자
}

class MyClass
{
public:
	int m_variable;
	int _variable;
	int variable;
	int variable_;
};

int main()
{
	int n_apples;
	int nApples;
	int VALUE;		// 1. 번거롭고 2. 매크로에 사용해서 변수명에 대문자를 잘 사용하지 않음
	int _apples;

	int total;
	int _orange;
	int VALUE;
	// int my variable name;
	int TotalCustomers;
	// int void;
	int numFruit;
	// int 2some;
	int meters_of_pipe;
}

 

 

지역 범위

#include <iostream>

using namespace std;

int main()
{
	int x = 0;
	// int x = 1; error!

	cout << x << " " << &x << endl;

	{
		// int x = 1;	// 새로운 변수 출력
		x = 1;			// 기존 변수 출력

		cout << x << " " << &x << endl;
	}

	cout << x << " " << &x << endl;

	{
		int x = 2;
	}

	return 0;
}

 

#include <iostream>

using namespace std;

void doSomething(int x)
{
	x = 123;
	cout << x << endl;	// #2
	// 123 출력
}

int main()
{
	int x = 0;

	cout << x << endl;	// #1
	// 0 출력
	doSomething(x);
	cout << x << endl;	// #2
	// 0 출력

	return 0;
}

 

 

해당 포스트는 '홍정모의 따라하며 배우는 C++' 강의를 수강하며 개인 백업용으로 메모하였습니다.

인프런: https://www.inflearn.com/course/following-c-plus

 

홍정모의 따라하며 배우는 C++ - 인프런

만약 C++를 쉽게 배울 수 있다면 배우지 않을 이유가 있을까요? 성공한 프로그래머로써의 경력을 꿈꾸지만 지금은 당장 하루하루 마음이 초조할 뿐인 입문자 분들을 돕기 위해 친절하고 자세하게 설명해드리는 강의입니다. 초보로 시작하더라도 중급을 넘어 고급 프로그래머로 가는 길목에 들어서고 싶으시다면 최고의 디딤돌이 되어드리겠습니다. 여러분의 꿈을 응원합니다! 초급 프로그래밍 언어 C++ 온라인 강의 C++

www.inflearn.com

 

반응형
복사했습니다!