Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А можно ли по другому ? классы, указатели на обьекты 
:(
    Опции темы
Guia
Дата 21.7.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



Есть ли более красивый способ добраться из main() до метода set() классса B ?

Код


class A {

public:
     virtual  void set()=0;
};

class B : public A {

    public:
                 void set();

};


void A::set(){

}

void B::set(){

}

int main(){

    A *a[10];
    a[0] = new B;
    a[0]->set();

    return 0;
}



Спасибо ! smile

Это сообщение отредактировал(а) Guia - 21.7.2005, 13:29
PM MAIL   Вверх
_hunter
Дата 21.7.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



ничего не понял. что такое этот set() -- где его объявление.
+ что-то я не вижу где ты до него добрался некрасиво -- поэтому и красивей посоветовать не могу


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guia
Дата 21.7.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



Ой smile Ошибочка ... отредактировал, посмотри... smile
PM MAIL   Вверх
chaos
Дата 21.7.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



а это че озночает
a[0]->read;
Добавлено @ 13:29
и почему ты делаешь
Код

void A::set(){

}

set у тебя же чисто виртуальная
Добавлено @ 13:33
вот тперь лутше(исправил a[0]->read; )
Добавлено @ 13:36
самый простой способ добраться до B::set()
Код

B objB();
objB.set();

PM WWW   Вверх
Guia
Дата 21.7.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



Тьфу ты ... вот что значит поспешишь - людей насмешишь smile

Цитата
set у тебя же чисто виртуальная


Такое задание ... в А вводятся некоторые данные, которые распространяются на класс Б,
из за чего пришлось делать вот что :

Код


class A {

private :
    char abc[20];

public:
     virtual  void set()=0;
};

class B : public A {
   
    private :
                int k;
   
    public:
                 void set();

};


void A::set(){
       scanf("%s",&abc);
       strcpy(this->abc,abc);
}

void B::set(){

    А::set();
    
    scanf("%d",&k);
    this->k = k;


}

int main(){

    A *a[10];
    a[0] = new B;
    a[0]->set();

    return 0;
}



Надеюсь,ничего не напутал...
PM MAIL   Вверх
chaos
Дата 21.7.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



1) подскажи мне в чем разница между this->abc и abc
(strcpy(this->abc,abc);)
Добавлено @ 13:51
тоже самое про k из класса B
PM WWW   Вверх
Guia
Дата 21.7.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



Цитата
разница между this->abc и abc


Это вроде как для того чтобы различать между а[0], а[1] итд...
Ладненько ... я пошел сдавать это задание как есть smile,
попозже покажу всю программу...
и спасибо за ответ!

Это сообщение отредактировал(а) Guia - 21.7.2005, 14:00
PM MAIL   Вверх
Guia
Дата 21.7.2005, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



хе хе ... this и правда вообще не надо...
задание приняли - если не лень почитайте ...
только без перевода smile

Код


#include <iostream>
#include <cstring>

using namespace std;

class Fahrzeuge {

    private :
        char Bezeichnung[20];
      
    public :
        bool Verfuegbar;
    
    Fahrzeuge(){
        Bezeichnung[0] = '\0';
        this->Verfuegbar = true;     
    }
  
    virtual void Einlesen();
    virtual void Ausgeben();
      
    bool Verleihen(){
        Verfuegbar = false;
        return false;
    }
  
    bool Zuruecknehmen() {
       Verfuegbar = true;
        return true;
    }
  
};

class PKW : public Fahrzeuge{

    private :
       int KW;
       int Hochstgeschwindigkeit;
       int Sitzplaetze;

    public :
        
        void Einlesen();        
      void Ausgeben();
       
};

class LKW : public Fahrzeuge{
 
    private:
     int KW;
     int Max_Zuladung;
    
    public :
        
        void Einlesen();  
      void Ausgeben();
       
};

class Anhaenger : public Fahrzeuge{
    
    private:
        int Max_Zuladung;
    
    public :

        void Einlesen();        
        void Ausgeben();
};

// Fahrzeuge 
void Fahrzeuge::Einlesen(){

    printf("Fahrzeugtyp eingeben :\n");
    scanf("%s",Bezeichnung);
}

void Fahrzeuge::Ausgeben(){

    cout << "\nBezeichnung: " << this->Bezeichnung;
    
    if(this->Verfuegbar)
        cout << "\nVerfuegbar: JA";
    
    else cout << "\nVerfuegbar: Nein";
    
}

// PKW
void PKW::Einlesen(){
    
    Fahrzeuge::Einlesen();

    cout << "\n Leistung in KW";
    cin >> KW;
    cout << "\n Geshwindigkeit";
    cin >> this->Hochstgeschwindigkeit;
    cout << "\n Sitzplaetze";
    cin >> this->Sitzplaetze;
      
}

void PKW::Ausgeben(){

    Fahrzeuge::Ausgeben();

    cout << "\n Leistung" << this->KW;
    cout << "\n Hoechstegeschwindigkeit" << this->Hochstgeschwindigkeit << " km/h";
    cout << "\n Sitzplaetze" << this->Sitzplaetze;  
}

// LKW
void LKW::Einlesen(){
            
    Fahrzeuge::Einlesen();

    cout << "\n Leistung in KW";
    cin >> this->KW;
    cout << "\n Max_Zuladung";
    cin >> this->Max_Zuladung;
}

void LKW::Ausgeben(){
    
    Fahrzeuge::Ausgeben();

    cout << "\nLeistung" << this->KW;   
    cout << "\nMaximale Zuladung" << this->Max_Zuladung; 
}

// Anhaenger
void Anhaenger::Einlesen(){

    Fahrzeuge::Einlesen();

    cout << "\n Max_Zuladung";
    cin >> this->Max_Zuladung;
}

void Anhaenger::Ausgeben(){

    Fahrzeuge::Ausgeben();

    cout << "\nMaximale Zuladung" << this->Max_Zuladung;
}

// Main
int main(){
    int anzahl=0,Maximum = 100;
    int menuwahl,fahrzeugtyp;
    int nummer;
    bool weiter = true;
    
    Fahrzeuge *f[100];
 
 while(weiter == true){
    cout << "\n Menu \n";
    cout << "\t 1.Fahrzeug eingeben\n"; 
    cout << "\t 2.Fahrzeug loeschen\n";
    cout << "\t 3.Alle Fahrzeuge anzeigen\n";
    cout << "\t 4.Alle Verfuegbaren anzeigen\n";
    cout << "\t 5.Fahrzeug ausleihen\n";
    cout << "\t 6.Fahrzeug zurueckgeben\n";
    cout << "\t 7.Beenden\n";
    cin >> menuwahl;
    
    if(menuwahl == 1){
        if (anzahl < Maximum){
            cout << "\nWelches Fahrzeug ?\n";
           cout << "\n-1 PKW";
           cout << "\n-2 LKW";
           cout << "\n-3 Anhaenger";
           cin >> fahrzeugtyp;
             
           if(fahrzeugtyp == 1) 
            {
                f[anzahl] = new PKW();
                f[anzahl]->Einlesen();
               
            }
            
            else if(fahrzeugtyp == 2)
            {
                f[anzahl]= new LKW();
                f[anzahl]->Einlesen();
               
            } 
           else if(fahrzeugtyp == 3)
            {
                f[anzahl]= new Anhaenger();
                f[anzahl]->Einlesen();
               
            } 
            anzahl++;
         
          }
          else 
          cout<<"\n Nicht mehr als 100 Fahrzeuge erlaubt";
    }
          
          
    else if(menuwahl == 2){
      cout << "\n Die Nummer des Fahrzeugs";
         cin >> nummer;
         delete f[nummer];
         
         f[nummer] = f[anzahl-1];
         anzahl--;
    }
         
                
    else if(menuwahl == 3){
        for(int i = 0; i < anzahl-1; i++)
        {
         cout << "\n\n" << i;
           f[i]->Ausgeben();    
        }
    }
         
         
    else if(menuwahl == 4){
        for(int i = 0; i < anzahl; i++)
        {
        if(f[i]->Verfuegbar == true)
        {
        cout << "\n\n" << i;
        f[i]->Ausgeben();    
        }
        }
    }
      
    
    else if(menuwahl == 5){
     cout << "\nWelches Fahrzeug wollen Sie ausleihen: ";
        cin >> nummer;
                if(nummer <= anzahl)
                {
                    if(f[nummer - 1]->Verfuegbar)
                    f[nummer - 1]->Verleihen();
                    else cout << "\nDieses Fahrzeug ist verliehen";
                }
                else cout << "\nDieses Fahrzeug existiert nicht";
    }

    else if(menuwahl == 6){
       cout << "\nWelches Fahrzeug wollen Sie zuruecgeben: ";
                cin >> nummer;
                if(nummer <= anzahl) 
                {
                    if(!f[nummer-1]->Verfuegbar)
                    f[nummer - 1]->Zuruecknehmen();
                    else cout << "\nDieses Fahrzeug ist schon abgegeben";
                }
                else cout << "\nDieses Fahrzeug existiert nicht";
    }

    else if(menuwahl == 7){
    weiter = false;    
    }
 }

 return 0;
}
     

PM MAIL   Вверх
Mayk
Дата 21.7.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Ich spreche Deutch nicht. Spreach Englisch bitte.
Добавлено @ 16:00
Кстати, private в начале объявления класса можно опустить. Все данные в классе по умолчанию закрыты. То есть
Код

class IchKeineWeissDeutch
{
    private:
    Menn *ich;
    public:
    void foo();
};

Полностью эквивалентен
Код

class IchKeineWeissDeutch
{
    Menn *ich;
    public:
    void foo();
};



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Guia
Дата 21.7.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.3.2005
Где: Germany, Bingen

Репутация: нет
Всего: нет



Все верно , да... но так по моему красивее.
в следующий раз код будет только с переводом клянусь smile

smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.