본문 바로가기

728x90
반응형

분류 전체보기

(162)
[C언어] 포인터 선언과 메모리 관리 포인터 변수 선언 포인터 변수를 선언할 때 아래와 같은 형태로 선언을 할 수 있다. #include struct Box{ int width; int height; int length;};int main(){ struct Box* box_a; box_a.width = 10; box_a.height = 20; box_a.length = 20; return 0;} 그러나 위 코드처럼 선언한 포인터 변수를 바로 사용하게 되면 메모리 에러가 발생할 수 있다. 포인터 변수를 선언하면 변수의 주소를 담기 위한 8byte의 공간을 할당할 뿐구조체의 메모리 공간은 따로 할당하지 않기 때문이다. 따라서 포인터 변수를 선언하고 해당 포인터 변수가 가리키는 주소에 메모리를 할당해 주..
[Java] 객체 생성 (class) 객체 (Object) 클래스 변수를 객체 혹은 오브젝트라고 부른다. 클래스 변수를 선언할 때에는 new 키워드를 사용하여 동적으로 생성해 준다. class Box { double width; double height; double depth;}class BoxDemo { public static void main(String[] args) { Box mybox = new Box(); }}     인스턴스 변수 접근 객체가 실제로 사용될 때 이를 인스턴스(instance)라고 한다. 인스턴스 변수에 접근할 때에는 C++과 마찬가지로 dot 연산자를 사용한다. class Box { double width; double height; double depth;}class BoxDemo { ..
[Java] main 함수, 출력 Java Java는 객체지향 언어로 클래스 단위로 동작한다. 즉, Java를 컴파일하기 위해서는 반드시 클래스가 필요하다. 심지어 main 함수마저도 class 내부에서 동작해야만 한다. 따라서 Java에서 main 함수는 아래와 같은 형태로 동작한다. class Example { public static void main(String [] args) { System.out.println(“This is a simple Java program.”); }}    출력 위 예제 코드에서 System.out.println은 개행을 포함하여 출력을 진행하는 역할을 한다. 만약 개행을 포함하고 싶지 않다면 System.out.print를 사용할 수 있다.  Java는 변수를 출력할 때 따로 서식문자가 필요하지 않..
[유니티] Photon Warnings / PUN is in development mode (development build). As the 'dev region' is not empty (jp) it overrides the found best region. See PhotonServerSettings. Warning 아래와 같은 경고가 발생 PUN is in development mode (development build). As the 'dev region' is not empty (jp) it overrides the found best region. See PhotonServerSettings.UnityEngine.Debug:LogWarning (object)Photon.Pun.PhotonNetwork:OnRegionsPinged (Photon.Realtime.RegionHandler) (at Assets/Photon/PhotonUnityNetworking/Code/PhotonNetworkPart.cs:2546)Photon.Realtime.MonoBehaviourEmpty:Update () (at..
[C++] 객체 내에서 static 변수, static 멤버함수 객체 내에서 staitc 지역변수 static 변수를 클래스 안에서 선언할 수도 있다. static 변수는 객체를 생성할 때마다 각 개체에 부여되는 것이 아니라 프로그램이 시작할 때부터 메모리가 할당되며객체와 독립적으로 존재한다. 또한 모든 객체가 같은 static 변수를 공유한다. 다음 코드를 통해 이를 확인할 수 있다. #include using namespace std;class testclass {private: static int num;public: testclass() { num++; } void shownum() { cout   따라서 위 코드의 결과는 다음과 같다. 그런데 static 멤버변수를 정의하는 방법이 조금 독특할 것이다.아래 코드와 같이 클래스 내부에서 초기화하는 것이 아니..
[C++] 얕은 복사, 깊은 복사 얕은 복사 디폴트 복사 생성자는 멤버 대 멤버의 복사를 진행한다. 이때 일어나는 복사 방식을 얕은 복사라고 한다. 이를 좀 더 자세히 설명하기 위해 아래 코드를 사용해 보겠다. #include #include using namespace std;class student {private: char* name; int age;public: student(const char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy_s(name, len, myname); age = myage; } ~student() { delete []name; cout   위 코드에서 person1을 생성한 후 인자를 전달하는 ..
[C++] explicit 묵시적 형 변환 앞선 포스팅에서 설명했던 대입을 사용한 객체의 초기화와 괄호를 사용하여 인자를 전달하는 초기화는 결과적으로 같다고 했다. 이렇게 되는 이유는 대입을 사용해도 묵시적으로 괄호를 사용한 것처럼 변환되기 때문이다. 묵시적 형 변환을 사용하면 편리하긴 하지만 코드가 자동으로 변환되는 것이 항상 좋은 일은 아니다. 따라서 묵시적 형 변환을 금지하고 싶다면 explicit 키워드를 사용할 수 있다.      explicit explicit 키워드는 생성자를 선언할 때 생성자 앞에 붙여서 사용할 수 있다. class AAA {private: int num;public: explicit AAA(int n) :num(n) { }} 위 코드와 같이 작성했다면 아래와 같은 선언은 불가능하게 된..
[C++] 복사 생성자를 활용한 객체의 대입 객체의 대입 만약 한 클래스의 객체를 2개를 생성할 때 하나의 객체에 다른 하나의 객체를 대입하면 어떻게 될까? 예를 들어 testclass의 객체 test1을 선언하고 testclass test2 = test1; 과 같은 형태로 객체를 생성하는 것이다. 직관적으로 코드의 의도를 보았을 때 test1의 모든 멤버 변수를 복사하여 test2의 멤버 변수에 대입하려는 코드인 것 같다. 그런데 이게 실제로 될까 라는 의문이 생기는데 놀랍게도 이것은 가능하다.       디폴트 복사 생성자 따로 대입을 위한 생성자를 선언하지 않았더라도 이것이 가능한 이유는 클래스에 디폴트 복사 생성자가 존재하기 때문이다. 예시로 클래스 하나를 작성해 보겠다. class testclass {private: int num1; in..

728x90
반응형