• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pusty konstruktor

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 18 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
class Result
{
    public:
    void menu(Wx w, Px p);
};

Jak widac klasa nie ma zadnych atrybutow, jak powinien wygladac do niej konstruktor?

Bo majac tak:

Result::Result()
Result::~Result()

dostaje error:

 kopia\structors.cpp|37|error: expected initializer before 'Result'|

Drugie pytanie to dlaczego nie majac zdeklarowanej przyjazni w klasie Px (jest w Wx a Px dziedziczy od Wx) moge uzyskac dostep do Px::degree w funkcji menu skoro przyjazn nie jest dziedziczona? Kody:

polynomials.h:

#include <iostream>

using namespace std;

class Polynomial
{
public:
    virtual void gather()=0;
    virtual void show()=0;
};

class Px;
class Wx;

class Result
{
    public:
    void menu(Wx w, Px p);
};

class Wx :public Polynomial
{
protected:
    string degreeStringNum;
    int degree;
    int helper;
    float *coefficients;

public:
    virtual void gather();
    virtual void show();
    void isInteger(string &s, int &i);
    friend void Result::menu(Wx w, Px p);

    Wx(string="0", int=0, int=0);
    ~Wx();

};

class Px :public Wx
{
public:

    virtual void gather();
    virtual void show();
    
    Px(string="0", int=0, int=0);
    ~Px();
};

structors.cpp:

#include <iostream>
#include "polynomials.h"

using namespace std;

Wx::Wx(string dNS, int d, int h)
{
    degreeStringNum=dNS;
    degree=d;
    helper=h;
    coefficients=new float[d+1];
    cout<<"constructor 1 called";
    cout<<endl;
}
Wx::~Wx()
{
    delete [] coefficients;
    cout<<"destructor 1 called";
    cout<<endl;
}

Px::Px(string dNS, int d, int h)
:Wx(dNS, d, h)
{
    coefficients=new float[d+1];
    cout<<"constructor 2 called";
    cout<<endl;
}
Px::~Px()
{
    delete [] coefficients;
    cout<<"destructor 2 called";
    cout<<endl;
}

//Result::Result()
//Result::~Result()

menu.cpp

#include <iostream>
#include "polynomials.h"
using namespace std;

void Result::menu(Wx w, Px p)
{
    cout<<p.degree;
    cout<<endl;
}

main.cpp:


#include <iostream>
#include "polynomials.h"
using namespace std;

int main()
{
    Wx w;
    Px p;
    Result r;

    Polynomial *pointerWx;
    Polynomial *pointerPx;
    pointerWx=&w;
    pointerPx=&p;
    pointerWx->gather();
    pointerWx->show();
    pointerPx->gather();
    pointerPx->show();
    r.menu(w, p);
}

No i trzecie pytanie to dlaczego z tego jest taki output: 

constructor 1 called
constructor 1 called
constructor 2 called
Input degree of polynomial W(x): 3
Input coefficients and constant of polynomial W(x):
1
2
3
4
W(x)= x3+2x2+3x+4

Input degree of polynomial P(x): 2
Input coefficients and constant of polynomial P(x):
9
8
7
P(x)= 9x2+8x+7

2
destructor 1 called
destructor 2 called
destructor 1 called
destructor 2 called
destructor 1 called
destructor 1 called

mam na mysli te destruktory, cos ich za duzo :p, te liczby oraz napisy "Input degree and constant..." itp to zasluga innych funkcji w moim programie ale nie sa one kluczowe tutaj. Skąd się wziely te destruktory, przed dodaniem klasy Result oraz zaprzyjaznienia jej funkcji z klasami Px i Wx bylo tylko tak z tego co pamietam:

destructor 2 called
destructor 1 called 
destructor 1 called

 

1 odpowiedź

+1 głos
odpowiedź 19 sierpnia 2020 przez j23 Mędrzec (194,920 p.)

1.

class Result
{
public:
    Result() {} 
};

Chociaż jeśli ten konstruktor nic nie robi, to nie trzeba go w ogóle definiować.

2. Result::menu jest zaprzyjaźniona z klasą Wx, zatem ma dostęp.

3. w menu parametry przekazujesz przez wartość, czyli tworzone są kopie obiektów, które niszczone są po wyjściu z metody.

komentarz 19 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
ok a powiedz mi moze oczywiste pytanie i nawet to sprawdzalem ale czy ten kod dziala tak ze Wx posiada int degree, int helper, string degreeStringNum oraz float *coefficients i Px posiada int degree, int helper, string degreeStringNum oraz float *coefficients tyle, ze osobne?
1
komentarz 19 sierpnia 2020 przez j23 Mędrzec (194,920 p.)

Obie klasy będą posiadać te pola, różnica jest tylko taka, że klasa Wx definiuje je (tworzy), a Px jedynie dziedziczy.

komentarz 19 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
dzieki za potwierdzenie! jednak nadal troche tego nie rozumiem dlaczego nie musze deklarowac tej przyjazni w Px
1
komentarz 19 sierpnia 2020 przez j23 Mędrzec (194,920 p.)
Musiałbyś to zrobić, dla pól zdefiniowanych w tej klasie.
komentarz 19 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
no ok, dziekI! zle zrozumialem to co wczesniej przeczytalem/uslyszalem i tyle

Podobne pytania

0 głosów
2 odpowiedzi 2,073 wizyt
pytanie zadane 28 października 2017 w Android, Swift, Symbian przez Kubs Mądrala (5,190 p.)
0 głosów
1 odpowiedź 463 wizyt
pytanie zadane 18 marca 2021 w C i C++ przez ******** Początkujący (260 p.)
0 głosów
2 odpowiedzi 219 wizyt
pytanie zadane 18 września 2020 w C i C++ przez stanleylbn Nowicjusz (180 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...