[C++ 정리] 함수의 종류 및 호출 유형 2015-07-06

C++에서 함수를 정의하고 호출하는 유형은 다음과 같다.

함수의 종류

* 정적함수
  - 전역함수①
  - namespace 내의 전역함수②
  - static 멤버함수③
* 멤버함수④
함수의 호출 유형
* 정적함수의 호출
* 객체를 통한 멤버함수의 호출
* 객체의 주소를 통한 멤버함수의 호출
#include "stdafx.h"
#include <iostream>

using namespace std;

void Test()
{
	cout << "정적함수 :: 전역함수\n";
}

namespace TestNamespace
{
	void Test()
	{
		cout << "정적함수 :: namespace 내의 전역함수\n";
	}
}

class TestClass
{
public:
	static void Test()
	{
		cout << "정적함수 :: static 멤버함수\n";
	}
	void TestMember()
	{
		cout << "멤버함수\n";
	}
};

int _tmain(int argc, _TCHAR* argv[])
{	
	Test();// ① - 정적함수 호출
	TestNamespace::Test();// ② - 정적함수 호출
	TestClass testClass;
	testClass.Test();// ③ - 객체를 통한 정적함수 호출
	testClass.TestMember();// ④ - 객체를 통한 멤버함수 호출

	TestClass* testPoint = &testClass;
	testPoint->Test();// ③ - 객체의 주소를 통한 정적함수 호출
	testPoint->TestMember();// ④ - 객체의 주소를 통한 멤버함수 호출

	return 0;
}

[C++ 정리] struct와 class의 차이점 2015-06-29

C++에서는 struct와 class 키워드가 거의 같은 역할을 한다. 차이점이라면 한정자(접근제어)가 struct에서는 기본 public:이며 class에서는 private:라는 점이다.

#include "stdafx.h"
#include <iostream>

using namespace std;

class PointP
{
	int x;
	int y;
public:
	PointP(int _x, int _y) :x(_x), y(_y){}
};

struct PointS
{
	int x;
	int y;
	PointS(int _x, int _y) :x(_x), y(_y){}
};

int _tmain(int argc, _TCHAR* argv[])
{
	PointP point1(10, 10);
	// error 접근불가 : 한정자를 지정하지 않으면 private이다
	// cout << point1.x;

	PointS point2(20, 20);
	cout << point2.x;
		
	return 0;
}
* 구조체에서는 기본 한정자가 public이다.
* 클래스에서는 기본 한정자가 private이다.
* C++에서는 구조체에 함수를 넣을 수 있다.

[C++ 정리] 연산자 오버로딩 2015-06-29

사용자가 만든 클래스 타입에 C++의 연산자를 오버로딩 하여 사용할 수 있는데 이는 더 직관적이며 일반화된 코드를 만들 수 있게 해준다.

#include "stdafx.h"
#include <iostream>

using namespace std;

class Point
{
private:
	int x;
	int y;
public:
	Point(int _x, int _y) :x(_x), y(_y){}	
	// 1. 멤버함수를 이용한 연산자 오버로딩
	const int operator+(const Point& point2)
	{
		return 10;
	}
};

// 2. 전역함수를 이용한 연산자 오버로딩
const int operator-(const Point& point1, const Point& point2)
{
	return 20;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Point point1(10, 10), point2(20, 20);
	int testPlus = point1 + point2;
	int testMinus = point1 - point2;

	cout << "PLUS : " << testPlus << "\n";
	cout << "MINUS : " << testMinus << "\n";
		
	return 0;
}
* 멤버함수를 이용한 연산자 오버로딩, 전역함수를 이용한 연산자 오버로딩 두가지 방법이 있다.