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.0347 sec