🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.c
10 messages
10 total messages Started by Borneq Mon, 07 Dec 2020 19:04
Różne nazwy konstruktora?
#310334
Author: Borneq
Date: Mon, 07 Dec 2020 19:04
7 lines
1348 bytes
W starym Pascalu choćby konstruktor może mieć różne nazwy. W C++ może 
być wiele konstruktorów różniących się parametrami.
Jednak czasem potrzeba by były różne nazwy.
Taki przykład:
Liczba zespolona, ma pola Re i Im. Inicjuje się tymi dwiema liczbami, a 
chciałbym jeszcze inicjować przez promień i kąt.
Co warto zrobić?
Re: Różne nazwy konstruktora?
#310335
Author: Maciek Godek
Date: Mon, 07 Dec 2020 20:04
14 lines
2248 bytes
poniedziałek, 7 grudnia 2020 o 20:05:03 UTC+1 Borneq napisał(a):
> W starym Pascalu choćby konstruktor może mieć różne nazwy. W C++ może 
> być wiele konstruktorów różniących się parametrami. 
> Jednak czasem potrzeba by były różne nazwy. 
> Taki przykład: 
> Liczba zespolona, ma pola Re i Im. Inicjuje się tymi dwiema liczbami, a 
> chciałbym jeszcze inicjować przez promień i kąt. 
> Co warto zrobić?

Ponieważ kąt nie jest "normalną" liczbą, a liczbą z określonego przedziału (powiedzmy, od 0 do 2pi), to można stworzyć osobną klasę Angle, i kontruktor przeciążony dla obiektu tej klasy.
Można też stworzyć metodę statyczną zwracającą instancje klasy.

Choć przyznam szczerze, że gdybym chciał korzystać z liczb zespolonych w C++, to bym użył std::complex.
(I generalnie, jak bym chciał rozwiązać jakiś problem, to bym zaczął od poszukania gotowca)
Re: Różne nazwy konstruktora?
#310336
Author: Wojciech Muła
Date: Mon, 07 Dec 2020 20:10
37 lines
2342 bytes
On Monday, December 7, 2020 at 8:05:03 PM UTC+1, Borneq wrote:
> W starym Pascalu choćby konstruktor może mieć różne nazwy. W C++ może 
> być wiele konstruktorów różniących się parametrami. 
> Jednak czasem potrzeba by były różne nazwy. 
> Taki przykład: 
> Liczba zespolona, ma pola Re i Im. Inicjuje się tymi dwiema liczbami, a 
> chciałbym jeszcze inicjować przez promień i kąt. 
> Co warto zrobić?

1. Statyczna metoda

class Complex {
public:
    Complex(double re, double im);
    static Complex from_polar(duoble mod, double arg);
}

2. Specjalizacja z własnym typem

struct UsePolarCoordsPlease {};

UsePolarCoordsPlease from_polar;

class Complex {
public:
    Complex(double re, double im);
    Complex(double mod, double arg, UsePolarCoordsPlease);
};

Complex a{1, 2};
Complex b{5, 12, from_polar};

3. Wprowadzić osobny typ do przechowywania kątów, który nie jest domyślnie
konwertowalny na liczbę i wtedy robisz specjalizacje dla niego. Ale to już
zdecydowanie najwięcej zabawy.

w.
Re: Różne nazwy konstruktora?
#310341
Author: heby
Date: Mon, 07 Dec 2020 21:19
4 lines
1176 bytes
On 07/12/2020 20:04, Borneq wrote:
> Co warto zrobić?

Fabrykę.
Re: Różne nazwy konstruktora?
#310342
Author: Ghost
Date: Tue, 08 Dec 2020 17:42
11 lines
1359 bytes

Użytkownik "heby"  napisał w wiadomości grup 
dyskusyjnych:rqm68j$cls$1@dont-email.me...

On 07/12/2020 20:04, Borneq wrote:
>> Co warto zrobić?

>Fabrykę.

Do tego trzeba trzech gosci, z ktorych zaden nie ma nic. 
Re: Różne nazwy konstruktora?
#310337
Author: M.M.
Date: Wed, 23 Dec 2020 02:22
59 lines
3049 bytes
On Monday, December 7, 2020 at 9:10:09 PM UTC+1, Wojciech Muła wrote:
> On Monday, December 7, 2020 at 8:05:03 PM UTC+1, Borneq wrote: 
> > W starym Pascalu choćby konstruktor może mieć różne nazwy. W C++ może 
> > być wiele konstruktorów różniących się parametrami. 
> > Jednak czasem potrzeba by były różne nazwy. 
> > Taki przykład: 
> > Liczba zespolona, ma pola Re i Im. Inicjuje się tymi dwiema liczbami, a 
> > chciałbym jeszcze inicjować przez promień i kąt. 
> > Co warto zrobić?
> 1. Statyczna metoda 
> 
> class Complex { 
> public: 
> Complex(double re, double im); 
> static Complex from_polar(duoble mod, double arg); 
> } 
> 
> 2. Specjalizacja z własnym typem 
> 
> struct UsePolarCoordsPlease {}; 
> 
> UsePolarCoordsPlease from_polar; 
> 
> class Complex { 
> public: 
> Complex(double re, double im); 
> Complex(double mod, double arg, UsePolarCoordsPlease); 
> }; 
> 
> Complex a{1, 2}; 
> Complex b{5, 12, from_polar}; 
> 
> 3. Wprowadzić osobny typ do przechowywania kątów, który nie jest domyślnie 
> konwertowalny na liczbę i wtedy robisz specjalizacje dla niego. Ale to już 
> zdecydowanie najwięcej zabawy. 
> 
> w.

Trochę inne zagadnienie związane z konstruktorami, które zawsze mnie denerwowało w C++.
Poniższy kod w C++ się nie skompiluje:

class A {
    int a;
public:
    A(const int a):a(a) {
    }
};
class B : public A {
};
int main()
{
    B b(3);
    return 0;
}

Natomiast odpowiedni kod w PHP działa bez zarzutu. Co by było złego, gdyby w C++ 
konstruktory 'były dziedziczone' ? 

Pozdrawiam
Re: Różne nazwy konstruktora?
#310343
Author: M.M.
Date: Wed, 23 Dec 2020 02:22
11 lines
1669 bytes
On Tuesday, December 8, 2020 at 6:42:29 PM UTC+1, Ghost wrote:
> Użytkownik "heby" napisał w wiadomości grup 
> dyskusyjnych:rqm68j$cls$1...@dont-email.me...
> On 07/12/2020 20:04, Borneq wrote: 
> >> Co warto zrobić? 
> 
> >Fabrykę.
> Do tego trzeba trzech gosci, z ktorych zaden nie ma nic.

Słyszałem, że w HP wystarczyło dwóch.
Pozdrawiam
Re: Różne nazwy konstruktora?
#310338
Author: Wojciech Muła
Date: Wed, 23 Dec 2020 15:22
30 lines
1932 bytes
On Wednesday, December 23, 2020 at 3:22:35 AM UTC+1, M.M. wrote:
> Trochę inne zagadnienie związane z konstruktorami, które zawsze mnie denerwowało w C++. 
> Poniższy kod w C++ się nie skompiluje: 
> 
> class A { 
> int a; 
> public: 
> A(const int a):a(a) { 
> } 
> }; 
> class B : public A { 
> }; 
> int main() 
> { 
> B b(3); 
> return 0; 
> } 
> 
> Natomiast odpowiedni kod w PHP działa bez zarzutu. Co by było złego, gdyby w C++ 
> konstruktory 'były dziedziczone' ? 

Od C++11:

class B: public A {
    using A::A;
};

Więcej na https://en.cppreference.com/w/cpp/language/using_declaration

w.
Re: Różne nazwy konstruktora?
#310339
Author: M.M.
Date: Wed, 23 Dec 2020 16:04
32 lines
2312 bytes
On Wednesday, December 23, 2020 at 4:22:30 PM UTC+1, Wojciech Muła wrote:
> On Wednesday, December 23, 2020 at 3:22:35 AM UTC+1, M.M. wrote: 
> > Trochę inne zagadnienie związane z konstruktorami, które zawsze mnie denerwowało w C++. 
> > Poniższy kod w C++ się nie skompiluje: 
> > 
> > class A { 
> > int a; 
> > public: 
> > A(const int a):a(a) { 
> > } 
> > }; 
> > class B : public A { 
> > }; 
> > int main() 
> > { 
> > B b(3); 
> > return 0; 
> > } 
> > 
> > Natomiast odpowiedni kod w PHP działa bez zarzutu. Co by było złego, gdyby w C++ 
> > konstruktory 'były dziedziczone' ?
> Od C++11: 
> 
> class B: public A { 
> using A::A; 
> }; 
> 
> Więcej na https://en.cppreference.com/w/cpp/language/using_declaration 

Faktycznie.

Pozdrawiam.
Re: Różne nazwy konstruktora?
#310340
Author: Przemek Biernat
Date: Wed, 29 Mar 2023 17:27
61 lines
3471 bytes
On Wednesday, December 23, 2020 at 3:22:35 AM UTC+1, M.M. wrote:
> On Monday, December 7, 2020 at 9:10:09 PM UTC+1, Wojciech Muła wrote: 
> > On Monday, December 7, 2020 at 8:05:03 PM UTC+1, Borneq wrote: 
> > > W starym Pascalu choćby konstruktor może mieć różne nazwy. W C++ może 
> > > być wiele konstruktorów różniących się parametrami. 
> > > Jednak czasem potrzeba by były różne nazwy. 
> > > Taki przykład: 
> > > Liczba zespolona, ma pola Re i Im. Inicjuje się tymi dwiema liczbami, a 
> > > chciałbym jeszcze inicjować przez promień i kąt. 
> > > Co warto zrobić? 
> > 1. Statyczna metoda 
> > 
> > class Complex { 
> > public: 
> > Complex(double re, double im); 
> > static Complex from_polar(duoble mod, double arg); 
> > } 
> > 
> > 2. Specjalizacja z własnym typem 
> > 
> > struct UsePolarCoordsPlease {}; 
> > 
> > UsePolarCoordsPlease from_polar; 
> > 
> > class Complex { 
> > public: 
> > Complex(double re, double im); 
> > Complex(double mod, double arg, UsePolarCoordsPlease); 
> > }; 
> > 
> > Complex a{1, 2}; 
> > Complex b{5, 12, from_polar}; 
> > 
> > 3. Wprowadzić osobny typ do przechowywania kątów, który nie jest domyślnie 
> > konwertowalny na liczbę i wtedy robisz specjalizacje dla niego. Ale to już 
> > zdecydowanie najwięcej zabawy. 
> > 
> > w.
> Trochę inne zagadnienie związane z konstruktorami, które zawsze mnie denerwowało w C++. 
> Poniższy kod w C++ się nie skompiluje: 
> 
> class A { 
> int a; 
> public: 
> A(const int a):a(a) { 
> } 
> }; 
> class B : public A { 
> }; 
> int main() 
> { 
> B b(3); 
> return 0; 
> } 
> 
> Natomiast odpowiedni kod w PHP działa bez zarzutu. Co by było złego, gdyby w C++ 
> konstruktory 'były dziedziczone' ? 
> 
> Pozdrawiam

Nie rozumiem dlaczego ciebie to denerwuje. Normalne zachowanie w C++.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads