1. 문 를 명 ¶
- 는 die메 . 런데. 뻔뻔럽 메를 . 떻 ? 봅.
~cpp #include <iostream> using namespace std; class Foo{ public: int id; Foo(){ static idSequance = 0; id = idSequance++; cout << "Create! id = " << id << endl; } void die(){ cout << "I suicide. Id is " << id << endl; delete this; // } void sayMyId(){ cout << "My Id is no " << id << endl; } void sayHello(){ cout << "say Hello" << endl; } }; int main(int argc, char** argv) { cout << endl << ":::::: Case 1 - 동 " << endl; Foo* foo1 = new Foo();// Create! 를 . foo1->sayHello(); // Hello foo1->sayMyId(); // id foo1->die(); // foo1->sayHello(); // 동 능 foo1->sayMyId(); // 동 능 // id cout << endl << ":::::: Case 2 - id " << endl; Foo* foo2 = new Foo();// Create! 를 . foo2->sayHello(); // Hello World foo2->sayMyId(); // id foo2->die(); foo2->sayHello(); foo2->sayMyId(); cout << endl << ":::::: Case 3 - NULL 메 " << endl; Foo* foo3 = NULL; // 명보. foo3->sayHello(); // Hello 를 . //foo3->sayMyId(); // debug, release 모 동 . //foo3->die(); // debug, release 모 동 . cout << endl << ":::::: Case3 - 변 " << endl; Foo foo4; foo4.sayHello(); // Hello World foo4.sayMyId(); // id foo4.die(); // debug mode assertion error foo4.sayHello(); // release 동 능 foo4.sayMyId(); // release 동 능 cout << endl; return 0; }는 됩. 보면, 보 는면 명 보.
~cpp :::::: Case 1 - 동 Create! id = 0 say Hello My Id is no 0 I suicide. Id is 0 say Hello My Id is no 3604872 :::::: Case 2 - id Create! id = 1 say Hello My Id is no 1 I suicide. Id is 1 say Hello My Id is no 3604872 :::::: Case 3 - NULL 메 say Hello :::::: Case3 - 변 Create! id = 2 say Hello My Id is no 2 I suicide. Id is 2 say Hello My Id is no 2 Press any key to continue
2.1. Case1 - 동 ¶
~cpp Foo* foo1 = new Foo(); // Create! 를 . foo1->sayHello(); // Hello World foo1->sayMyId(); // id foo1->die(); // . foo1->sayHello(); // ? foo1->sayMyId(); // ..--;
2.2. Case2 - NULL 메 ¶
~cpp Foo* foo2 = NULL; // 명보. foo2->sayHello(); // Hello 를 .(--;) foo2->sayMyId(); // debug, release 모 동 . foo2->die(); // debug, release 모 동 .
3. 명 ¶
" 명="를 면 명.
C++ 목는 C 능 면 OOP를 는 . OOP 납 를 . OOP를 C 됩.
보는 를 는 C++ 배 .
- , C++ 봅.
- , 멤 들 는 보.
- 마막, 문 대 봅.
3.1. C++ . ¶
러 봅. 리 class를 면 램 class Data 들 는 "class " 보를 놓 .
~cpp class Foo{ public: int id; // <- 부 보 . };C++ Strong typed language 므 모 , 는 . 만 는 변 .
~cpp Foo foo4;new 는 runtime class instance 를 낼 . 를 램 는 id int 는 보를 는 class "class " 보를 는 .
, class struct 는 동 . 리, class 는 몇 더 는데, foo 를 member 를 는 .
러, 러 리는 보를 변, new type 보 , 를 는 부 . 리 는데 번 명.
class instance vpt, 대 pointer 보 더 들 . 러 는 .
3.2. instance 멤 들 봅. ¶
리는 러 . 러 리는 member 부 를 리는 모 . 리 돌.
C++ , instance 멤 들 리 . 멤 는 모 동 방 , 모 동 메 를 .
러 면, 문 .
동 면 instance 떻 는?
동 면 instance 떻 는?
무 리냐 면,
러
~cpp class Foo{ public: int id; void sayMyId(){ cout << "My Id is no " << id << endl; } };는 는 instance id 는 .
러
~cpp Foo::sayMyId()
무런 는 면, id 는 . C++ 는 런 를 class 들 class 를 묵 . ,
~cpp Foo:sayMyId()는 러
~cpp Foo:sayMyId(Foo* x)는 , 만듭. 리, 면
~cpp Foo*
부 ~cpp foo1->sayMyId(foo1);를 를 .
C++ 러 C 면 OOP를 .
. 러 class내 static 멤 를 instance instance 멤 변 못는 됩. static 면 묵 pointer 를 를 .
런 배 바 .3.3. 문 대 봅. ¶
를 면,
~cpp Foo* foo1 = new Foo(); // Create! 를 . foo1->sayHello(); // Hello foo1->sayMyId(); // id foo1->die(); // foo1->sayHello(); // 동 능 foo1->sayMyId(); // 동 능
.( 랫)
. (C++ 빼) 문 는 부,
~cpp Create! id = 0 say Hello My Id is no 0 I suicide. Id is 0 say Hello // (delete this) My Id is no 3604872 // (delete this)
~cpp sayHello() sayMyId()
. 명 member 를 는 메 면 ~cpp sayHello() -> sayHello(Foo*) sayMyId() -> sayMyId(Foo*)는 . 만 는 른 .
sayHello()는 instance variable 는는 ,
~cpp sayMyId()
는 는 .따, 메모리를 (?) 리 instance 부 보리 id 뚱 .
리
~cpp say Hello (delete this) My Id is no 3604872 (delete this)instance 메모리는, process 메모리 돌, . 부 delete this instance 떻 ""느냐 따, 랫 르 .
리
~cpp delete x는 는 x 변 . 변 . 는 call by value x NULL 변봤, 받 는 문, 변 .
만 러, 메모리를 system 면, access 러 . 러 랫 .
foo2~3 러 배 를 는 보 명.
foo2는 C++ 볼 는 . (foo3 만)
~cpp Foo* foo2 = NULL; // 명보. foo2->sayHello(); // Hello 를 .는
~cpp say Hello동.
~cpp Foo::sayHello(foo2) -> Foo::sayHello(NULL), sayHello 내는 pointer NULL 므 무런 러 .
OOP instance 므 불능 만, 됩. C++ instance 무를 . . NULL 0 는 pointer .
5. 덧붙 Java 를 봅. ¶
instance 무를 는 Java 를 봅.
( null , instance pool instance를 pointer를 는 . )
~cpp // Main.java file class Foo{ public int a; void sayHello(){ System.out.println("Hello"); } } public class Main { public static void main(String[] args) { Foo foo= null; foo.sayHello(); } }를 면, exception . 는 Java Language Specification 2nd (3rd .) jvm specification .
( null , instance pool instance를 pointer를 는 . )
~cpp java.lang.NullPointerException at Main.main(Main.java:19) Exception in thread "main"
C++는 NULL , 0 문 불능.러 vm 들 모 null 는 능.