struct encapsulation

Bill Baxter dnewsgroup at billbaxter.com
Tue Feb 20 00:23:30 PST 2007


Knud Soerensen wrote:
> On Mon, 19 Feb 2007 21:18:05 -0500, alex wrote:
> 
>> This code compiles - I don't think it should.
>> If b is a private member of A then why can I change it outside the class ?
>>
>> struct A
>> {
>> private:
>> 	int b;
>> };
>>
>>
>> int main()
>> {
>> 	A a;
>> 	a.b = 10;
>>
>> 	return 0;
>> }
> 
> I see that you have solved your problem, but I have some thought on struct
> encapsulation.
> 
> Imagine a struct like:
> 
> struct angle
> {
> float degrees;
> }
> Now imagine we write a lot of code using angle:
> 
>  angle a1;
>  a1.degrees= 60.0;
>  ... 
>  writefln(a1.degrees);
> 
> 
> and then we need to refactor angle to use radians
> 
> We change angle to 
> class angle
> {
> float radians;
> public:
> float degrees(); // get degrees
> void degrees(float); //set degrees
> }
> 
> But now we have to go trough all the code and change it to.
> 
> angle a1;
>  a1.degrees(60.0);
>  ... 
>  writefln(a1.degrees());
> 
> 
> What I think could be very useful is for D to automatic
> accept bar() and bar(type) as getter and setter for elements in structs and classes like.
> 
> struct foo
> {
> type bar; 
> }
> 
> I know that we might like to keep the old way for backwards compatibility
> with c/c++ and D 1.0, but at last it will allow further generations to
> write maintainable code.


Either A) I'm totally misunderstanding you, B) you're being funny or C) 
you're not aware of property syntax:
    http://www.digitalmars.com/d/property.html#classproperties

--bb



More information about the Digitalmars-d mailing list