Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[c++] problem z interfejsem

#1
[c++] problem z interfejsem
Witam,
może będzie mogli mi pomóc w zrobieniu interfejsu w języku C++. W zadaniu jakie mam wymyśliłem sobie istnienie interfejsu Rownanie. Jedną z jego metod miała być metoda dajPochodna, która miała zwrócić pochodną równania, również typu Rownanie. Następnie w programie tworzę klasy oparte o ten interfejs - np. Wielomian. Idea, jest dosyć prosta i w Javie zrobiłbym to w pięć minut. Problem mam z C++, który chyba tylko udaje obiektowość. Stworzyłem taki kod:
Kod:
class IRownanie {
    virtual IRownanie dajPochodna() = 0;
};
Niestety, to nie działa:
Cytat:main.cpp:11:23: error: invalid abstract return type for member function ‘virtual IRownanie IRownanie::dajPochodna()’
main.cpp:10:17: note: because the following virtual functions are pure within ‘IRownanie’:
main.cpp:11:23: note: virtual IRownanie IRownanie::dajPochodna()
Jak rozwiązać ten problem po stronie C++? Jak zrobić taki prosty interfejs zgodnie z zasadami tego języka?
 System operacyjny: linux Przeglądarka: chrome
#2
RE: [c++] problem z interfejsem
Nie słuchaj się mnie, ja tylko wystawię własną tezę.

Ponieważ jest to klasa abstrakcyjna, to nie może istnieć żaden obiekt tej klasy. A gdy zwracasz w funkcji klasę abstrakcyjną, to jest ona tworzona :D

Powtórzę - nie jestem pewien czy mam rację. Jeśli moja teza jest błędna - bardzo proszę o poprawienie mnie, zdobędę wtedy więcej wiedzy.
 System operacyjny: windows_xp_2003 Przeglądarka: opera
#3
RE: [c++] problem z interfejsem
Witaj.
Gmp masz rację.
Dodatkowo w tym wypadku tworzenie obiektu interfejsu nie jest uzasadnione.
Dopisz klasę przechowującą wyniki operacji i obiekt tej klasy zwracaj.
Kod:
class ObjMath {

};
class IRownanie {
    public:
        virtual ObjMath dajPochodna() = 0;
};
class Wielomian : public IRownanie {
    public:
        ObjMath dajPochodna() {
            ObjMath x;
            return x;
        }
};
Żaden kraj nie może być dobrze rządzony, dopóki wszyscy jego obywatele nie będą pamiętać, że oni są strażnikami prawa.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#4
RE: [c++] problem z interfejsem
Tylko, że pochodna jest również równaniem, dlatego żądanie by pochodna była tego typu ma sens. Przecież na tym polega obiektowość (tutaj konkretnie polimorfizm). Napisałem algorytm (w innej klasie), który używa równania i pochodnej. Nie interesuje mnie konkretna implementacja, a jedynie wymagam by klasa miała zaimplementowane konkretne metody. Dlatego idealny tutaj jest interfejs. Wasze rozwiązanie mnie nie satysfakcjonuje, ponieważ nic nie wiem o obiekcie ObjMath, a wszczególności będzie on inny dla każdej implementacji równania. A co gdybym chciał policzyć drugą pochodną?

Czy w C++ działa polimorfizm dynamiczny (chodzi mi o polimorfizm w trakcie działania programu)? Jeżeli gmp ma rację, to wygląda na to, że nie albo nie wiem jak go osiągnąć.
 System operacyjny: windows_xp_2003 Przeglądarka: ie8
#5
RE: [c++] problem z interfejsem
Kod:
#include <iostream>

struct ABC { virtual void foo() = 0; };
struct A : ABC { virtual void foo() { std::cout << "A::foo()"; } };
struct B : ABC { virtual void foo() { std::cout << "B::foo()"; } };

int main() {
    ABC* abc = nullptr;
    int a = 0;
    std::cin >> a;
    if (a == 1) {
        abc = new A;
    } else {
        abc = new B;
    }
    abc->foo();
    delete abc;
  
    return 0;
}
To działa czy nie działa? Język

Działa, ale na wskaźnikach i referencjach, a Ty próbujesz zwrócić obiekt klasy abstrakcyjnej.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#6
RE: [c++] problem z interfejsem
Xupicor ten przykład nie odpowiada na moje pytanie. Zmień kod tak, aby metoda foo zwracała typ, może to być referencja lub wskaźnik. Czy poniższy przykład będzie prawidłowy?
Kod:
struct ABC { virtual ABC* foo() = 0; };
struct A : ABC { virtual ABC* foo() { return new A(); } };
struct B : ABC { virtual ABC* foo() { return new B(); } };
 System operacyjny: windows_xp_2003 Przeglądarka: ie8
#7
RE: [c++] problem z interfejsem
Odpowiadałem na Twoje ostatnie pytanie, nie na to z całego wątku. Jest w czasie działania programu? Jest.Oczko

Co do powyższego, nie widzę za bardzo powodu, żeby miał nie zadziałać. Czy Ci będzie pasować do projektu, to już Ty lepiej wiesz.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#8
RE: [c++] problem z interfejsem
Sprawdzę wieczorem w domu jak będę miał dostęp do środowiska. To czy mam wskaźnik, czy wartość nie ma dla mnie znaczenia. Istotne jest to, by móc zdefiniować taką metodę w interfejsie.

EDIT:
Sprawdziłem na wskaźnikach i działa. O to mi chodziło, wielkie dzięki. W Java wszystko jest przekazywane przez referencję więc tam nie ma takich problemów. ;-)
 System operacyjny: windows_xp_2003 Przeglądarka: ie8
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
class wielomian c++cpp interfejs

Podobne wątki ([c++] problem z interfejsem)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Visual Studio 2005 problem z interfejsem graficznym rzemol 0 867 02.12.2008, 18:36
Ostatni post: rzemol

Skocz do:


Wybrane wątki ([c++] problem z interfejsem)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 4007 05.04.2020 15:46
Ostatni post: Physicist
  Prośba o pomoc przy wyborze języka do konkretnego projektu. romands 6 3259 05.04.2020 14:07
Ostatni post: romands
Sad PhpMyAdmin w Mysql 8.0 Lauczi 3 3227 31.03.2020 16:34
Ostatni post: Lauczi
Ściana Klika pytań plz pomóżcie Samek2222 1 3059 22.03.2020 18:59
Ostatni post: Ajgor
  Pytanie - programowanie batch [cmd] Max23 0 3040 20.03.2020 01:03
Ostatni post: Max23
  Oczekiwanie na Akcje przycisku wanhelsing 8 4844 01.03.2020 19:44
Ostatni post: Szachista
Toungue Wybór szkoły średniej przez potencjalnego programistę Zikinan 1 4632 09.02.2020 15:58
Ostatni post: dzikuu86
  Skrypt pod sklep internetowy Talcia 4 7239 14.12.2019 19:48
Ostatni post: hexopex760
  Poszukuję pomysłu na prosty program ;) janciu96 5 14002 13.12.2019 23:32
Ostatni post: Ajgor
  Programowanie Batch (CMD) Informatyk2019 0 5530 11.12.2019 18:30
Ostatni post: Informatyk2019
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 2507 10.12.2019 17:58
Ostatni post: rafal12999
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 13418 10.12.2019 13:16
Ostatni post: Ajgor
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 3028 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 7579 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 6616 06.11.2019 23:04
Ostatni post: mysza2323