Thread View: pl.comp.lang.c
10 messages
10 total messages
Started by Borneq
Mon, 07 Dec 2020 19:04
Różne nazwy konstruktora?
Author: Borneq
Date: Mon, 07 Dec 2020 19:04
Date: Mon, 07 Dec 2020 19:04
7 lines
1348 bytes
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?
Author: Maciek Godek
Date: Mon, 07 Dec 2020 20:04
Date: Mon, 07 Dec 2020 20:04
14 lines
2248 bytes
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?
Author: Wojciech Muła
Date: Mon, 07 Dec 2020 20:10
Date: Mon, 07 Dec 2020 20:10
37 lines
2342 bytes
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?
Author: heby
Date: Mon, 07 Dec 2020 21:19
Date: Mon, 07 Dec 2020 21:19
4 lines
1176 bytes
1176 bytes
On 07/12/2020 20:04, Borneq wrote: > Co warto zrobić? Fabrykę.
Re: Różne nazwy konstruktora?
Author: Ghost
Date: Tue, 08 Dec 2020 17:42
Date: Tue, 08 Dec 2020 17:42
11 lines
1359 bytes
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?
Author: M.M.
Date: Wed, 23 Dec 2020 02:22
Date: Wed, 23 Dec 2020 02:22
59 lines
3049 bytes
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?
Author: M.M.
Date: Wed, 23 Dec 2020 02:22
Date: Wed, 23 Dec 2020 02:22
11 lines
1669 bytes
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?
Author: Wojciech Muła
Date: Wed, 23 Dec 2020 15:22
Date: Wed, 23 Dec 2020 15:22
30 lines
1932 bytes
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?
Author: M.M.
Date: Wed, 23 Dec 2020 16:04
Date: Wed, 23 Dec 2020 16:04
32 lines
2312 bytes
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?
Author: Przemek Biernat
Date: Wed, 29 Mar 2023 17:27
Date: Wed, 29 Mar 2023 17:27
61 lines
3471 bytes
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