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 는 능.









