본문 바로가기

728x90
반응형

C++

(31)
[C++] 객체 배열 객체 배열 객체를 배열로 선언하는 것도 가능하다. testclass라는 이름의 클래스를 선언했다고 했을 때 testclass의 객체 5개를 배열로 선언하는 방법은 아래 코드와 같다.testclass arr[5]; 물론 배열로 선언을 해도 생성자는 실행된다. 따라서 아래 코드를 실행시켜 보면 "Hello, world!"가 5번 출력되는 것을 확인할 수 있다. #include using namespace std;class testclass {public: testclass() { cout   그러나 생성자에 인자를 전달할 때 초기화를 아래 코드처럼 해야 하기 때문에선언한 객체 중 일부는 전달하고 일부는 전달하지 않는 것은 불가능하다. testclass arr[5] = {0, 1, 2, 3, 4};   또..
[C++] 멤버 이니셜라이저 (Member Initializer), const 멤버변수 초기화 멤버 이니셜라이저 멤버 이니셜라이저를 사용하면 객체가 아닌 멤버의 초기화가 가능하다. class TestClass {private: int num1; int num2;public: TestClass(int n1, int n2) : num1(n1), num2(n2) { cout  위 코드에서 : num(n) 이 멤버 이니셜라이저인데 생성자의 인자로 n1, n2 를 전달받으면num1, num2 의 선언과 동시에 대입하겠다는 의미이다. 즉, 초기화를 하겠다는 의미이다.             멤버 이니셜라이저의 활용 멤버 이니셜라이저를 사용할 때 선언한 후 대입하는 것이 아니라초기화를 진행하게 되기 때문에 const 멤버변수의 초기화도 가능하다. class TestClass {private: const in..
[C++] 생성자와 소멸자, 생성자의 오버로딩, 디폴트 생성자, 객체의 동적할당 생성자 C++에서도 C#에서와 마찬가지로 생성자를 선언할 수 있다. C# 문법을 포스팅할 때 이미 한 번 설명했지만다시 설명하자만 생성자란 클래스와 이름이 같은 멤버함수로 객체 생성 시 최초 1회만 호출된다. 이 함수는 반환형이 선언되어 있지 않으며 실제로 아무것도 반환하지 않는다. 따라서 아래와 같이 생성자를 선언할 수 있다. class TestClass {private: int num = 10;public: TestClass(int n) { num = n; cout             생성자의 오버로딩 생성자의 오버로딩 또한 가능하다. class TestClass {private: int num = 10;public: Test..
[C++] 객체의 전달 (const&) 객체의 전달 - 객체를 그대로 파라미터로 사용하는 경우 전달방식에 있어서 원본을 사용하는 것이 아닌 복사된 값을 사용하므로 임시 복사본이 생성된다. - 참조연산자(&)를 사용하여 파라미터로 사용하는 경우 실제 data의 원본을 가지고 사용하므로 복사 생성자를 호출하는 비용이 없다. 하지만 data 원본이므로 함수 내에서 값이 변경되는 리스크가 존재하기 때문에 경우에 따라서 사용해야 한다. 이 경우에 한 개의 객체가 존재하며 2개의 이름을 갖게 된다. (함수 인자명, 원본 객체명) #include class TestClass { private: int a = 10; int b = 15; public: int plus () { a++; b++; return a + b; } }; void GetPlusValu..
[C++] 클래스, 접근제어지시자(public, private), const 함수 클래스와 구조체 구조체에서 struct를 class로 바꾸기만 하면 클래스의 선언은 끝난다.  구조체struct Pos { double posx; double posy; void ShowCurPos() { std::cout   클래스class Pos { double posx; double posy; void ShowCurPos() { std::cout   구조체와 역할도 동일하다. 여러 개의 변수를 하나의 의미로 묶는 것이다.  또한 클래스에 접근하는 방법도 동일하다. 클래스 변수를 하나 생성해 주고 도트연산자를 통해서 접근할 수 있다.             접근제어 지시자 클래스는 세 가지 접근 제어지시자를 통해서 선언된 함수 및 변수 등의 접근 범위를 제한할 수 있다.  public, protec..
[C++] 구조체 typedef 선언 생략 C++에서의 구조체는 C표준에서의 구조체와 약간 차이가 있다. C표준에서는 구조체 변수를 선언할 때 struct 키워드를 생략하기 위해서 typedef 선언을 추가해야만 했다. 그러나 C++에서는 별도의 typedef 선언 없이도 아래 코드처럼 struct 키워드를 생략하는 것이 가능하다. struct Pos { double posx; double posy; }; int main () { Pos posA; return 0; } 구조체 안에 함수 삽입 또한 C++에서는 구조체 안에서 함수를 선언할 수도 있다. 함수에 접근할 때에는 구조체 변수에 접근하는 것과 마찬가지로 도트연산자를 통해서 접근할 수 있다. 따라서 아래 코드처럼 사용하는 것이 가능하다. #include struct ..
[C++] 배열, 동적 할당 (new와 delete) 메모리 할당 new와 delete를 사용하면 malloc와 free를 대체하여 메모리를 할당할 수 있다.  #include #include #include char *MakeStr(int len) { char* str = (char*)malloc(sizeof(char)*len); return str;}int main(){ char* str = MakeStr(20); strcpy(str, "Hello World!"); std::cout  위와 같이 C++에서도 malloc와 free를 사용한 메모리 할당이 가능하다. 그러나 위 방법을 사용할 경우 두 가지 불편한 점이 존재한다. 할당할 대상의 정보를 반드시 바이트 크기로 전달해야 하며 반환형이 void포인터이기 때문에 적절히 형 변환을 해주어야한다.  이때..
[c++] 참조자 참조자 C++에서 참조자를 사용하면 하나의 변수에 여러 개의 이름을 부여하는 것이 가능하다. int num1 = 2000; int &num2 = num1; 위 코드를 보기만 해서는 이해가 잘 안될 수도 있다. C언어에서 분명히 &연산자는 주소값을 나타내는 것이라고 하였는데 주소에 2000을 저장할 수가 있는것일까? 당연히 주소에 2000이라는 정수를 넣는 것은 말이 안되고 이때 &연산자가 다른 의미로 사용이 된 것이다. &가 이미 선언된 변수 앞에 오면 주소를 반환하라는 뜻이지만 새로 선언되는 변수 앞에 올 때에는 참조자의 선언을 뜻하게 된다. 따라서 위의 코드가 실행되면 num2는 num1 의 참조자가 되며 2000이 저장되어 있는 num1의 메모리에는 num2라는 이름도 붙게 되는 것이다. 참조자의 ..

728x90
반응형