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

Konstruktor i destruktor

0 głosów
40 wizyt
pytanie zadane 13 grudnia 2016 w C i C++ przez użytkownika klap Początkujący (340 punkty)
edycja 13 grudnia 2016 przez użytkownika klap

Cześć, potrzebujemy Waszej porady. Z konstruktorami i destruktorami mamy styczność pierwszy raz i czy moglibyście powiedzić czy poprawnie ich użyliśmy?

Prosty program ma dodawać lub mnożyć jak sobie zażyczymy. Są cztery funkcje (użyliśmy void).

argum.cpp

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

using namespace std;
argum::argum()
{
 
    pierwszy_arg=a;
    drugi_arg=b;
}


void argum::wywolaj()
{
    cout<< "Podaj a : "; cin>>a;
    cout<<"Podaj b : "; cin>>b;
}

void argum::dodaj()
{
    c=a+b;
    cout<<"Wynik dodawania : "<<c;
}

void argum::mnozenie()
{
    c=a*b;
    cout<<"Wynik mnozenia : "<<c;
}

// argum::wynik(int obiekt)
//{
  //  cout<<"Podaj jaki wynik chcesz uzyskac, mnozenie (1), dodawanie (0) : "; cin>>obiekt;
//}

argum::~argum()
{
    cout<<endl;
}

 

argum.h

#ifndef ARGUM_H
#define ARGUM_H
#include <iostream>

using namespace std;

class argum
{
    public:
         argum();
        ~argum();
        void wywolaj();
       // void wynik(int obiekt);
        void dodaj();
        void mnozenie();
        int c,a,b;

    private:
        int pierwszy_arg;
        int drugi_arg;
};

#endif // ARGUM_H

 

main

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

using namespace std;

int main()
{
    argum a1;
    a1.wywolaj();

    int obiekt;
    cout<<"Podaj mnozenie 1 dodawanie 0: "; cin>>obiekt;

    if (obiekt==0)
    {
        a1.dodaj();
    }
    if (obiekt==1)
    {
        a1.mnozenie();
    }
    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 13 grudnia 2016 przez użytkownika Sinnley Stary wyjadacz (10,060 punkty)
Trzeci kod wrzuć do bloku i zmień nazwy tych zmiennych. Nie da się czytać kodu, w których zmienne są nazywane "aa" "a" "bb" "abcd" itp.
komentarz 13 grudnia 2016 przez użytkownika klap Początkujący (340 punkty)
Zmienione.
komentarz 14 grudnia 2016 przez użytkownika Sinnley Stary wyjadacz (10,060 punkty)

Chyba najlepiej pozbyć się funkcji wywołaj z obiektu, zrobić ją jako oddzielną, destruktora również się pozbyć skoro przechodzi tylko do nowej lini, no i wyrzucić zmienne a,b,c.

Metody niech zwracają inta, a wyniki wywołuj w mainie, np tak:

#include <iostream>

using namespace std;


class Argum
{
public:

	Argum(int, int);
	int dodaj();
	int mnozenie();

private:
	int pierwszy_arg;
	int drugi_arg;
};

void wywolaj(int&a, int&b)
{
	cout << "Podaj a: ";
	cin >> a;
	cout << "Podaj b: ";
	cin >> b;
}

int main() {

	int pierwszyArgument, drugiArgument;
	
	wywolaj(pierwszyArgument, drugiArgument);

	Argum obj(pierwszyArgument,drugiArgument);

	cout << "Wynik mnozenia to: " << obj.mnozenie() << "a dodawania: " << obj.dodaj();
	cin.get();
	return 0;
}
Argum::Argum(int a, int b) {

	pierwszy_arg = a;
	drugi_arg = b;
}
int Argum::dodaj() {
	return pierwszy_arg + drugi_arg;
}
int Argum::mnozenie() {
	return pierwszy_arg * drugi_arg;
}

Jeśli chcesz rozbić na kilka plików - śmiało.

0 głosów
odpowiedź 13 grudnia 2016 przez użytkownika Dominik Kulis Użytkownik (570 punkty)
Przy tworzeniu kontruktorw zalecam pisać w taki sposób

argum::argum(int a, int b)

: aa(a), bb(b)

{

}

a obiekt tworzysz:
argum a1(wartosc1, wartosc2);

 

W twoim programie nie potrzebnie tworzysz tyle zmiennych
komentarz 13 grudnia 2016 przez użytkownika klap Początkujący (340 punkty)
Wiem, to jest zadanie i jest nakazane tyle tworzyć. Przyznam szczerze że mam problem z tym jak wpisze argum a1(a,b); to później nie wiem jak wczytaj np void dodaj(); bo jako a1.dodaj() juz go nie wczytam

Podobne pytania

0 głosów
1 odpowiedź 84 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez użytkownika jkiesiak Nowicjusz (120 punkty)
+1 głos
0 odpowiedzi 201 wizyt
0 głosów
2 odpowiedzi 102 wizyt
pytanie zadane 23 października 2016 w C i C++ przez użytkownika Evelek Stary wyjadacz (14,080 punkty)
...