어떻게 하면 코드 작성자가 사용자에게 더 편의를 제공할 것인가?

C에서는 structure의 멤버들에 대한 정보/사용법을 사용자가 모두 알아야만 한다.

#include <stdio.h>

//code writer
typedef struct USERDATA
{
	int nAge;
	char szName[32];
	void(*Print)(struct USERDATA *);	//step 3 improvement
} USERDATA;
 
void PrintData(USERDATA *pUser)			//step 2 improvement
{
	printf("%d, %s\n", pUser->nAge, pUser->szName);
}

// code user
int main(void)
{
	USERDATA user = { 20, "Peter", PrintData };
	//printf("%d, %s\n", user.nAge, user.szName);		//step 1 C style
	//PrintData(&user);					//step 2 improvement
	user.Print(&user);					//step 3 improvement
    
	return 0;
}

From step 3, it seems the function is working as structure's member in code user point of view.

But it looks redundant which is using 'user' stucture's address agin from Print member function.

// code user
int main(void)
{
	USERDATA user = { 20, "Peter", PrintData };
    //printf("%d, %s\n", user.nAge, user.szName);	//step 1 C style
    //PrintData(&user);					//step 2 improvement
    //user.Print(&user);				//step 3 improvement
    user.Print();					//step 4 improvement
    
	return 0;
}

In C++, it's decided to hide &user parameter. it's related with 'this' pointer.

 

#include "stdafx.h"
#include <iostream>
using namespace std;

// code writer
class CTest
{
public :
	CTest() {}
    
	int m_nData1 = 10;
	int m_nData2 = 20;
    
	void PrintData(void)
	{
		cout << m_nData1 << endl;
		cout << m_nData2 << endl;
	}
};

// user code
int _tmain(int argc, _TCHAR* argv[])
{
	CTest t;
	t.PrintData();

	return 0;
}
반응형

'Prog&Algol' 카테고리의 다른 글

Algo | C++ | DFS and BFS  (0) 2022.03.30
BJ | 2178 | BFS shorted path  (0) 2022.03.30
C++ | Namespace  (0) 2022.03.29
BJ | 9996 | connect server when missing Korea  (0) 2022.03.29
BJ | 2309 | 일곱 난쟁이 | Combination  (0) 2022.03.22

+ Recent posts