Jump to page: 1 2
Thread overview
Why structs and classes instanciations are made differently ?
Jul 24, 2017
Houdini
Jul 24, 2017
Andrea Fontana
Jul 24, 2017
Houdini
Jul 24, 2017
Houdini
Jul 25, 2017
Houdini
Jul 26, 2017
Patrick Schluter
Jul 25, 2017
Kagamin
Jul 25, 2017
Houdini
Jul 25, 2017
Kagamin
Jul 26, 2017
Houdini
Jul 26, 2017
Ali Çehreli
July 24, 2017
Hello,

I am a C++ coder, and I am learning D (just reading a book, for now).

D is very similar to C++ (and also grabs godd ideas from Python), but I have a naive question : why does Walter Bright chose to instanciate classes like in Java ? And why is it different for structs ?
July 24, 2017
On Monday, 24 July 2017 at 15:21:54 UTC, Houdini wrote:
> Hello,
>
> I am a C++ coder, and I am learning D (just reading a book, for now).
>
> D is very similar to C++ (and also grabs godd ideas from Python), but I have a naive question : why does Walter Bright chose to instanciate classes like in Java ? And why is it different for structs ?

Maybe this will help you:
https://stackoverflow.com/questions/10965577/usage-preference-between-a-struct-and-a-class-in-d-language



July 24, 2017
On 7/24/17 11:21 AM, Houdini wrote:
> Hello,
> 
> I am a C++ coder, and I am learning D (just reading a book, for now).
> 
> D is very similar to C++ (and also grabs godd ideas from Python), but I have a naive question : why does Walter Bright chose to instanciate classes like in Java ? And why is it different for structs ?

Because types with inheritance generally don't work right if you pass by value (i.e. the slicing problem).

structs don't support inheritance or virtual functions, so they can be safely passed by value.

-Steve
July 24, 2017
On Monday, 24 July 2017 at 15:37:51 UTC, Andrea Fontana wrote:

> Maybe this will help you:
> https://stackoverflow.com/questions/10965577/usage-preference-between-a-struct-and-a-class-in-d-language

Thanks for this informative link.
July 24, 2017
On Monday, 24 July 2017 at 15:41:33 UTC, Steven Schveighoffer wrote:

> Because types with inheritance generally don't work right if you pass by value (i.e. the slicing problem).
>
> structs don't support inheritance or virtual functions, so they can be safely passed by value.

But in C++, we pass them by reference also to avoid copies (const &).
The potential polymorphic usage is not the only point to consider.

July 24, 2017
On Mon, Jul 24, 2017 at 03:45:29PM +0000, Houdini via Digitalmars-d-learn wrote:
> But in C++, we pass them by reference also to avoid copies (const &).

Exactly... in C++ you basically always pass by reference, so D made that the default.

July 24, 2017
On 7/24/17 11:45 AM, Houdini wrote:
> On Monday, 24 July 2017 at 15:41:33 UTC, Steven Schveighoffer wrote:
> 
>> Because types with inheritance generally don't work right if you pass by value (i.e. the slicing problem).
>>
>> structs don't support inheritance or virtual functions, so they can be safely passed by value.
> 
> But in C++, we pass them by reference also to avoid copies (const &).
> The potential polymorphic usage is not the only point to consider.
> 

In C++ class and struct are pretty much interchangeable, so technically, class is a wasted keyword for default visibility.

In D, I would use classes for any time I need polymorphism, and use structs otherwise.

-Steve
July 25, 2017
On Monday, 24 July 2017 at 17:42:30 UTC, Steven Schveighoffer wrote:

> In D, I would use classes for any time I need polymorphism, and use structs otherwise.

OK, I'll adhere to this method. :)

Thanks to all for your answers.

July 25, 2017
On Monday, 24 July 2017 at 15:21:54 UTC, Houdini wrote:
> D is very similar to C++ (and also grabs godd ideas from Python), but I have a naive question : why does Walter Bright chose to instanciate classes like in Java ?

C++ is big, there's always something you don't know about it. Java actually instantiates classes the C++ way: http://en.cppreference.com/w/cpp/language/new
July 25, 2017
On Tuesday, 25 July 2017 at 15:15:59 UTC, Kagamin wrote:

> C++ is big, there's always something you don't know about it. Java actually instantiates classes the C++ way: http://en.cppreference.com/w/cpp/language/new

Yes, but it isn't the default way in C++ to do dynamic instanciation. Usually, you do static initialization, except when the situation make taht impossible.
« First   ‹ Prev
1 2