Dziedziczenie klas w c++, nie wyświetla wyniku poprawnie

0

Witam
staram się ogarnąć dziedziczenie klas i problem wygląda następująco
W pliku input mam klasę Input gdzie chce pobrać od użytkownika jakąś literę, następnie chce zamienić na ASCII tą literę potem na binarny i do stringa.

Potem chce wykorzystać tego stringa w pliku encryption po to aby dodać go do wektora do osobnych miejsc a następnie z tego wektora z powrotem do inta(robię to w celu sprawdzenia czy działa)

No i właśnie nie działa bo program się mnie pyta o literę potem coś robi ale nic nie wyświetla i się kończy

działam też na 3 pliku main gdzie chce wywoływać wszystko po kolei

main.cpp

#include "input.cpp"
#include "encryption.cpp"
using namespace std;
 
int main()  {
    Input a;
     
    cout << a.ASCIItonumber();
 
    encrypt e;
    cout << e.tovector();
 
 
 
    return 0;
}


input.cpp

#pragma once
#include <iostream>
#include <bitset>//biblioteka pomocna przy formatowania z inta na binarny kod
#include <string>
using namespace std;
 
class Input {
public:
    string
    ASCIItonumber() { 
        cout << "Prosze wprowadzic znak: ";
        cin >> asciiChar;
 
        int number1 = static_cast<int>(asciiChar);
        string binaryString1 = bitset<8>(number1).to_string();
          
        // return binaryString1;
    }
};

encryption.cpp

#include <iostream>
#include <vector>
#include "input.cpp"
 
 
using namespace std;
 
class encrypt : public Input{
public:
    int tovector(){
 
        Input a;
        string s1 = a.ASCIItonumber();
 
        vector<int> letter;
 
        for(char c : s1){
            int digit = c - '0';
            letter.push_back(digit);
        }
        int number = 0;
        for(int digit : letter){
            number = number * 10 + digit;
        }
 
    return number;
    }
 
};

1

Widzę kilka problemów w tym kodzie. Po pierwsze: odwołujesz się do nieistniejącej zmiennej asciiChar.
Po drugie: dlaczego inkludujesz .cpp? Użyj plików .h/.hpp, oraz rozdziel warstwę prezentacji od implementacji. Po trzecie: cin może dodawać dodatkowy znak który powoduje błąd (polecam użyć np. cin.get()). Po czwarte: dlaczego return jest zakomentarzowany? Ponadto odradza się używania globalnych dyrektyw using namespace, ale w małych projektach nie powinny stanowić problemu. Wygląda to tak jakby kod był niepełny. Możliwe, że po drodze gdzieś jest zgłaszany wyjątek (można zrobić try..catch-e aby sprawdzić gdzie).

3

Trochę prędko zabrałeś się za dziedziczenie bo po kodzie widać, że nie rozumiesz jeszcze takich podstaw jak przypisywanie do zmiennych i ich przekazywanie, zakres zmiennych czy podział na nagłówki i implementacje co jest specyficzne dla C++. Samo dziedziczenie jest też w tym kodzie niepotrzebne bo i tak żeby zawołać ASCIItonumber stworzyłeś instancję Input zamiast wykorzystać odziedziczoną metodę. Po co też tworzysz dodatkową instancję Input w main to też nie rozumiem.

Poniżej masz działającego gotowca, podział na pliki sobie odpuść, dopóki nie zrozumiesz na czym polega podział na nagłówki i implementacje.

class Input {
public:
    string
    ASCIItonumber() { 
        cout << "Prosze wprowadzic znak: ";

        char asciiChar;
        cin >> asciiChar;
        cout << '\n';
        
        int number1 = static_cast<int>(asciiChar);
        string binaryString1 = bitset<8>(number1).to_string();
          
        return binaryString1;
    }
};

class encrypt : public Input{
public:
    int tovector(){
 
        string s1 = ASCIItonumber();
 
        vector<int> letter;
 
        for(char c : s1){
            int digit = c - '0';
            letter.push_back(digit);
        }
        int number = 0;
        for(int digit : letter){
            number = number * 10 + digit;
        }
 
    return number;
    }
};

int main()
{
    encrypt e;

    int num = e.tovector();
    cout << "Num " << num;
}
1

@s-wita: teraz w Udemy jest promocja, zainwestuj 29,99 PLN

2

Ten kod jest przekombinowany ponad miarę. Dodawanie tu klas nie ma sensu.
Na dodatek robisz jakieś szalone konwersje.
Zawsze mnie irytuje, gdy początkujący tworzą liczbę, która po wypisaniu w systemie dziesiętnym, wygląda na liczbę w systemie dwójkowym. Ty to przekombinowanie wzniosłeś na nowy poziom, bo jedyny powód dla którego to robisz, to pozbycie się zer wiodących z napisu wygenerowanego z std::bitset::to_string.

Tu jest uproszczona wersja: https://godbolt.org/z/8T3raMs67

1 użytkowników online, w tym zalogowanych: 0, gości: 1