Prog&Algol
C++ | history of Class
GilbertPark
2022. 3. 30. 21:05
어떻게 하면 코드 작성자가 사용자에게 더 편의를 제공할 것인가?
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;
}
반응형