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