이런 코드는 안전할까요? [C++]

cppig1995의 이미지

잡생각이라 플그밍 q&a에 올리기도 뭣하고...

File attachments: 
첨부파일 크기
파일 property.cpp405바이트
kkb110의 이미지

야 정말 아이디어 좋다 ㅋㅋㅋ
이렇게 쓰면 private 변수에 쓰는것과 읽는것을 같은 함수로 아주 깔끔하게 제공이 가능하네
마치 C#에 "속성" 기능을 구현한 것과 유사하네

내생각엔
언어적으로는 별 문제가 없는 것 같고 이코드를 썼을 때
"private맴버의 참조를 가지고 간 곳에서 포인터를 보관하고 있다가 private 맴버를 조작할 수 있다."
라는 전제해야하는 조건이 하나 더 생기는것 같다.

example.prop_i() = 40;
int &i = example.prop_i();

//do something

i = 44;
cout << example.prop_i() << endl;




result:

44

이런식으로 보관했다가 조작해버리는수가 생기니깐..
궁극적으로 private의 의미를 생각하면 좋은방법이라고 예기하긴 힘들거 같긴 하지만...
전제조건을 염두해 두고 코딩한다면 별로 안나빠보이네.

chronon의 이미지

stroustrup 책에 나오는 내용이었던 것 같은데요.

doldori의 이미지

안전성 면에서는 아래의 구조체와 비슷하겠네요.

struct ex
{
	int i;
	char ch;
};
gimmesilver의 이미지

그렇게 사용해도 무방하겠지만 사실 그렇게 되버리면 변수를 private으로 선언한 의미가 없겠군요...차라리 저라면 그냥 struct를 사용하겠습니다.

------------------------
http://agbird.egloos.com

dorado2의 이미지

아, 다른 데서 본 기억이 나는 코드네요.

뭐, 장단점은 잘 모르겠지만, 저도 잘 썼던 기억이...

chadr의 이미지

잘못하다간 아래와 같은 어처구니 없는 일이 생길지도 모르겠군요..

#include <iostream>

using namespace std;

class ex
{

 private :

	int i;
	char ch;

 public :

	int &prop_i() { return i; }
	char &prop_ch() { return ch; }

};

ex example;

int main()
{
    if (ex.prop_i() = 4)
   {
       //궁시렁궁시렁
   }
	return 1;
}
[/code]

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

비행소년의 이미지

int main()
{
    if (ex.prop_i() = 4)
   {
       //궁시렁궁시렁
   }
   return 1;
}

발견하기도 쉽지 않은 버그 군요. :cry:
실수를 미연에 방지 하기 위해서도 이렇게 써야 겠군요.

int main()
{
    if (4 = ex.prop_i())
   {
       //궁시렁궁시렁
   }
   return 1;
}

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

dasomoli의 이미지

C++에서 속성이라면, Borland C++ Builder 를 한번 사용해보세요.



dasomoli의 블로그(http://dasomoli.org)
dasomoli = DasomOLI = Dasom + DOLI = 다솜돌이
다솜 = 사랑하옴의 옛 고어.
Developer! ubuntu-ko! 다솜돌이 정석
khris의 이미지

꽤나 괜찮은것 같기는 한데...

struct를 쓰는것과 별로 다를게 없어보이는군요 '~'

그리고 이런 형태를 취한다고 해서 속성 개념이나 getter/setter 사용시에 얻을 수 있는 안정성을 얻을 수도 없고..

───────────────────────
yaourt -S gothick elegant
khris'log

cppig1995의 이미지

지금은 학교도서실.
첫번째 소스를 올렸군요.
집에 두번째소스가 있쑵니다.
시간나면 올리겠쑵니다.

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.