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

Wprowadzenie obiektowe (C++)

Object Storage Arubacloud
0 głosów
178 wizyt
pytanie zadane 16 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam dzisiaj rozpocząłem uczyć się programowania obiektowego w c++. Zaczynam rozumieć idee jego wykorzystywania, jednak chcąc stworzyć mały program natrafiłem na pierwszę błędy, których nie potrafię rozwiązać. Próbowałem wielu sposobów i tak również czytam o tym.

Proszę o podpowiedź.

#ifndef PRO_H_
#define PRO_H_

#include <string>
class character
{
        private:
                std::string nazwa;
                double zycie;
                int poziom;
        public:
                void dane_postaci(nazwa, zycie, poziom);
};
#endif 
#include "pro.h"
#include <iostream>

void character::dane_postaci(character::nazwa, character::zycie, character::poziom)
{ std::cout << "Nazwa: " << nazwa << "\nIlość życia: " << "\nPoziom: " << poziom << "\n\n"; }

int main()
{
        character bulma, vegeta;
        bulma.dane_postaci("BULMA", 6352.75, 130);
        vegeta.dane_postaci("VEGETA", 7342.64, 155);
}

 

2 odpowiedzi

0 głosów
odpowiedź 16 maja 2018 przez chucksqll Stary wyjadacz (12,930 p.)
wybrane 16 maja 2018 przez Sic
 
Najlepsza

Po pierwsze nazwę klasy piszemy z dużej litery.

Po drugie mylisz funkcję z konstruktorem.

void dane_postaci( nazwa, zycie, poziom);

zamień na

Character(string nazwa1, double zycie1, int poziom1)
{
nazwa=nazwa1;
zycie=zycie1;
poziom=poziom1;
}

I teraz dopiero powinieneś użyć tej funkcji do wyświetlenia danych, tyle że w nieco innej formie.

prototyp:

void dane_postaci();

definicja:

void character::dane_postaci()
{ std::cout << "Nazwa: " << nazwa << "\nIlość życia: " << "\nPoziom: " << poziom << "\n\n"; }

 

 

komentarz 17 maja 2018 przez Sic Dyskutant (8,510 p.)
Mając utworzony kontruktor w danej klasie musimy przypisanić do niego obiekt aby działał ..?

W takiej sytuacji dlaczego nie może on być utworzony poza klasą?
1
komentarz 17 maja 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Co, co?

Ważne, żeby prototyp konstruktora był w klasie, jego definicja może być poza.

class Czlowiek
{
 Czlowiek(...);
}
Czlowiek::Czlowiek(...)
{
...
}

konstruktor jest wywoływany zawsze kiedy tworzysz obiekt tej klasy, jeśli nie masz żadnego konstruktora, wywoływany jest konstruktor domyślny.

komentarz 17 maja 2018 przez Sic Dyskutant (8,510 p.)
Dzięki :D

a jakby miał wyglądać kontruktor domyślny w takiej sytuacji ?
1
komentarz 17 maja 2018 przez chucksqll Stary wyjadacz (12,930 p.)
Character(string nazwa1="Pierwszy czlowiek", double zycie1=15, int poziom1=20)...

Jego wywołanie:

Character nowy-twor;

https://pl.wikipedia.org/wiki/Konstruktor_(programowanie_obiektowe)#Konstruktor_domy%C5%9Blny tu masz to dobrze wytlumaczone

 

komentarz 18 maja 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję już rozumiem różnicę.
+1 głos
odpowiedź 16 maja 2018 przez Bondrusiek Maniak (61,370 p.)

Witam,

w funkcji składowej powinieneś podawać typy argumentów

void dane_postaci(nazwa, zycie, poziom);
na np.
void dane_postaci(std::string nazwa, double zycie, int poziom);

to samo przy definiowaniu tych funkcji

void character::dane_postaci(character::nazwa, character::zycie, character::poziom)
{ std::cout << "Nazwa: " << nazwa << "\nIlość życia: " << "\nPoziom: " << poziom << "\n\n"; }
na np
void character::dane_postaci(std::string nazwa, double zycie, int poziom)
{ std::cout << "Nazwa: " << nazwa << "\nIlość życia: " << "\nPoziom: " << poziom << "\n\n"; }

 

Podobne pytania

0 głosów
3 odpowiedzi 635 wizyt
0 głosów
1 odpowiedź 1,793 wizyt
pytanie zadane 7 maja 2018 w Java przez Tytanohinoid Początkujący (370 p.)
0 głosów
2 odpowiedzi 554 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...