Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ klasa korzystająca z wektora i metod innej klasy

Ostatnio zmodyfikowano 2013-01-09 19:41
Autor Wiadomość
Sztucznooki
Temat założony przez niniejszego użytkownika
C++ klasa korzystająca z wektora i metod innej klasy
» 2013-01-09 18:09:26
Jeszcze takie pytanie - co wpisac, zeby kod wyświetlał się w okienku kodu z sytaxem c++ ?

Witam, mam problem. Otóż piszę sobie pogram i moja klasa Klasyfikator musi mieć dostęp do rzeczy znajdujących się w  public klasy Dane.
Nie wiem co zrobić, aby funkcje z maina działały (mogą być trochę inne, chodzi o to, żeby po utworzeniu obiektu Klasyfikator klasyfikator móc posługując się nim dotrzeć do pól obiektu Dane dane) UWAGA! Proszę o wyrozumiałość, bo dopiero się uczę :/

ogólnie chodzi o to -> będę miał jeszcze potem klasę 1-R, która będzie
dziedziczyć po klasie klasyfikator. Chodzi o to, żebym mógł wywołać
funkcję "pobierz dane" a później "konwertuj" i dostać do klasy 1-R
element   vector <int> liczby, wyskosc i szerkosc; :/
bo na nim mam zamiar operować :/ ważne, żebym miał jakoś dostęp do
tego elementu :/

Main
C/C++
#include "Dane.cpp"
#include "Klasyfikator.cpp"

using namespace std;


int main()
{
   
    Klasyfikator klasyfikator;
   
    klasyfikator.dane.liczSzerokosc( dane.szerokosc );
    klasyfikator.dane.liczWysokosc( dane.wysokosc );
    klasyfikator.dane.pobierzDane( dane.nazwy );
    klasyfikator.dane.konwertujDane( dane.nazwy, dane.liczby, dane.widzianeNazwy );
    // cout<<"liczby: "<<dane.liczby.size()<<" nazwy "<<dane.nazwy.size()<<endl;
    //  for( unsigned int i = 0; i < dane.liczby.size(); i++ )
    // {cout<< dane.liczby[i] <<" ";
    // if(i%dane.szerokosc==0) cout<<endl;}
    // for(unsigned int i = 0; i < dane.widzianeNazwy.size(); i++ ) cout <<dane.widzianeNazwy[i]<<" ";
   
    return 0;
}

Klasyfikator.cpp
#include "Klasyfikator.h"

Klasyfikator.h
C/C++
#ifndef KLASYFIKATOR_H
#define KLASYFIKATOR_H
#include "Dane.h"

using namespace std;

class Klasyfikator
{
   
public:
    Dane dane;
   
   
};

#endif
Dane.h
C/C++
#ifndef DANE_H
#define DANE_H

#include <fstream>  //obsluga plikow
#include <iostream>
#include <cstdlib>
#include <vector>  //kontenery
#include <cstring> //strcmp

using namespace std;

class Dane
{
public:
    vector < string > nazwy;
    vector < string > widzianeNazwy;
    vector < unsigned int > liczby;
    int wysokosc;
    int szerokosc;
    void liczSzerokosc( int & szerokosc );
    void liczWysokosc( int & wysokosc );
    void pobierzDane( vector < string > & nazwy );
    void konwertujDane( vector < string > & nazwy,
    vector < unsigned int > & liczby,
    vector < string > & widzianeNazwy );
   
   
};
#endif
Dane.cpp (tego to chyba nawet czytac nie trzeba)
C/C++
#include "Dane.h"


void Dane::pobierzDane( vector < string > & nazwy )
{
    fstream plik;
    plik.open( "dane.txt", ios::in );
    string klucz;
    while( !plik.eof() )
    {
        string linia;
        getline( plik, linia );
        linia += ",";
        for( int i = 0; linia[ i ] >= 32; ++i )
        {
            if( linia[ i ] != 44 ) { klucz += linia[ i ]; } //jezeli rozne od przecinka
            else { nazwy.push_back( klucz ); //wrzucamy w wektor poszczegolne wyrazy s
                klucz.clear(); }
        } // for()
    } //zamyka while
    plik.close();
    return;
};

void Dane::liczWysokosc( int & wysokosc )
{
    fstream plik;
    plik.open( "dane.txt", ios::in );
    if( plik.good() )
    {
        wysokosc = 0;
        string linia;
        while( !plik.eof() )
        {
            getline( plik, linia );
            if( linia[ 0 ] ) wysokosc++; //liczmy wysokosc tablicy
           
        }
        plik.close();
    }
    else cout << "Error! Nie udalo sie otworzyc pliku podczas liczenia wysokosci!" << endl;
   
};

void Dane::liczSzerokosc( int & szerokosc )
{
    fstream plik;
    plik.open( "dane.txt", ios::in );
    if( plik.good() )
    {
        szerokosc = 1;
        string linia;
        getline( plik, linia );
        for( int i = 0; linia[ i ] >= ' '; i++ )
             if( linia[ i ] == ',' ) szerokosc++;
       
    }
    else cout << "Error! Nie udalo sie otworzyc pliku podczas liczenia szerokosci!" << endl;
   
};

void Dane::konwertujDane( vector < string > & nazwy,
vector < unsigned int > & liczby,
vector < string > & widzianeNazwy )
{
    for( unsigned int i = 0; i < nazwy.size(); i++ )
    { bool znaleziono = false;
        unsigned int j = 0;
        for(; j < widzianeNazwy.size(); j++ )
        {
            if( nazwy[ i ] == widzianeNazwy[ j ] ) { znaleziono = true; liczby.push_back( j ); break; }
        } //for od widzianeNazwy.size
        if( !znaleziono )
        {
            widzianeNazwy.push_back( nazwy[ i ] );
            liczby.push_back( j );
        }
       
    } //for od nazwy.size
   
    /*
        vector <string> test;
   
      for(unsigned int i=0 ; i<liczby.size() ; i++)
        {   test.push_back(widzianeNazwy[liczby[i]]);}
         for( unsigned int i = 0; i < test.size(); i++ )
        {cout<< test[i] <<" ";}
       // if(i!=0&&i%szerokosc==0) cout<<endl;}
    */
   
};

PS dziekuje za edycje posta, teraz juz bede wiedzial jak formatowac
P-73477
Sztucznooki
Temat założony przez niniejszego użytkownika
» 2013-01-09 19:41:38
Rozwiązane.
trzeba było zastosować klasyfikator.dane.liczSzerokosc( klasyfikator.dane.szerokosc ); zamiast klasyfikator.dane.liczSzerokosc( dane.szerokosc );   itd.
P-73486
« 1 »
  Strona 1 z 1