E D R , A S I H C RSS

Cpp에서의멤버함수구현메커니즘



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. 따른

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 모  .	

2.3. Case3 -

~cpp 
	Foo foo3;
	foo3.sayHello();		// Hello World 
	foo3.sayMyId();		// id 
	foo3.die();		// debug mode assertion error
	foo3.sayHello();		// release  능
	foo3.sayMyId();		// release  

DeleteMe 만, . --NeoCoin

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 ?

리냐 면,
~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();		// 동 

.( )

~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)  
. (C++ ) 는 부, ~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 .

4.

  • C++ class class instance pointer .
  • pointer .

5. 덧붙 Java 를 봅.

instance 무를 는 Java 를 봅.
~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 .

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:02
Processing time 0.0330 sec