Converting multiple inheritance code into C ++ for D language
Jean Cesar via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Feb 18 11:05:14 PST 2017
On Saturday, 18 February 2017 at 16:27:51 UTC, biozic wrote:
> On Saturday, 18 February 2017 at 12:56:51 UTC, wiki wrote:
>> On Saturday, 18 February 2017 at 09:33:25 UTC, biozic wrote:
>>> A mixin can be used to provide an base implementation for the
>>> methods of an interface, along with data members, so that you
>>> don't have to define it in every class that implements the
>>> interface.
>>>
>>> An example : https://dpaste.dzfl.pl/b656851e5c51
>>
>>
>>
>> I tried to use it in the same way but I did not understand
>> correctly because to simulate, alias in this code I had
>> already defined the classes as interfaces but I did not
>> understand how these constructors should be declared for later
>> use ..
>
> There are multiple typos problems with your code. For me, the
> main problem would be that this code is using OOP the wrong
> way, but maybe this code doesn't represent what you actually
> want to do... Anyway, see a corrected version below.
>
> import std.stdio;
>
> class Test1
> {
> protected string _msg1;
>
> this(string msg1)
> {
> _msg1 = msg1;
> }
> } // No semicolon
>
> interface Test2
> {
> // Interfaces can't have data members
>
> // This template could actually be out of the interface.
> // I just put it here because it's more clear that it's
> related to Test2.
> mixin template Impl()
> {
> protected string _msg2; // Data member is inside the
> template
>
> // This function is not a constructor. Only the class
> implementing
> // the interface will have one.
> void thisTest2(string msg2)
> {
> _msg2 = msg2;
> }
> }
> }
>
> interface Test3
> {
> mixin template Impl()
> {
> protected string _msg3;
> void thisTest3(string msg3)
> {
> _msg3 = msg3;
> }
> }
> }
>
> class Test4 : Test1, Test2, Test3
> {
> mixin Test2.Impl;
> mixin Test3.Impl;
>
> string _msg4;
>
> this(string msg1, string msg2, string msg3, string msg4)
> {
> super(msg1); // Calls the constructor of Test1
> thisTest2(msg2); // Use interface Test2
> thisTest3(msg3); // Use interface Test3
> this._msg4 = msg4; // Test4 implementation
> }
>
> void show() // Don't use override here
> {
> writeln(_msg1, _msg2, _msg3, _msg4);
> }
> }
>
> void main()
> {
> auto teste = new Test4("\n\tTeste1 ", "Teste2 ", "Teste3 ",
> "Teste4");
> teste.show();
> // No explicit return is required
> }
This is exactly what I want this code I did to understand how
would apply multiple inheritance in D, C # also process using
interfaces but the difference from C # to D is that C # already
in the base class you have to define it as interface. ..
More information about the Digitalmars-d-learn
mailing list