Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6489
Последний выпуск: 19.06.2015

Как использовать переменную из одного класса в другом с помощью указателей?

86K
07 декабря 2012 года
lav007
2 / / 07.12.2012
Всем привет.

Я давно не живу в русско язычной стране, так что могут быть ошибки.

У меня такая проблема.
Мне надо создать два класса и третьим классом этими двумя классами управлять. Но у меня ни чего не получается.
Вот пример.
Код:
.h файл

class car
{
privat:
int KmReport
public
void setKmReport()
getKmReport(void)
};

class Drive
{
public:
int drive_length(* Car);
};
Вот у нас есть класс Car и в ней в private есть переменная KmReport (то есть сколько км машина проехала). C помощью get и set я добираюсь до этой переменной.

Класс drive своего рода управляющий. То есть при введение drive_length через cin я должен изменить проеденный путь в классе Car.
1. Вопрос должен быть class drive , friend class?
Код:
cpp.

void Auto::setKmReport()
{
     KmReport =0 // машина не сколько не проехала первоначально
}

Auto::getKmReport(void)
{
return KmReport;
}

// с этого момента я не увер что я делаю.
int Drive::drive_length(*Car)
{
int value;
cout << "Enter length of race:  ";
cin >> value;

// если это вообще правильно(все выше стоящие)
}
Спасибо за внимание и вашу помощь.
261
07 декабря 2012 года
arrjj
1.7K / / 26.01.2011
Всё зависит от архитектуры приложения и иерархии классов.
Код:
//.h

class Auto
{
public:
Auto();
void setKmReport(int km);
void resetKmReport();
int getKmReport();
private:
int KmReport;
};

class Drive
{
public:
int drive_length(car * Car);
};
//cpp

void Auto::resetKmReport()
{
     KmReport =0;
}

Auto::Auto()
{
resetKmReport();
}

void Auto::setKmReport(int km)
{
KmReport+=km;
}

Auto::getKmReport()
{
return KmReport;
}

int Drive::drive_length(Auto * Car)
{
int value;
cout << "Enter length of race:  ";
cin >> value;
Car->setKmReport(value);
return Car->getKmReport();
}
70K
07 декабря 2012 года
ProkletyiPirat
76 / / 25.07.2012
arrjj
я не понял что именно вы хотите сделать сей строчкой:

Код:
//.h

class Auto
{
private:
    car();  //что именно вы хотите тут сделать?? вызвать конструктор которого нет?
    int KmReport;  //но зачем тогда переопределять?
public:
    void setKmReport(int km);
    void resetKmReport();
    int getKmReport();
};
lav007
Цитата:
У меня такая проблема.
Мне надо создать два класса и третьим классом этими двумя классами управлять. Но у меня ни чего не получается.
Вот пример.


во первых классы не создаются! они лишь описывают объект ! (реально же объекта не существует до строчки вида тип имя_переменной)


во вторых

 
Код:
int drive_length(* Car); //сия запись неправильна !

/* общий вид всех функций (методов) любого класса */
тив_возвращаемого_значения      область_видимости :: имя_функции  (ТИП_переменной   ИМЯ_переменной) { тело функции }


/* в вашем примере не хватает */
int drive_length(ТИП_переменной * Car);

lav007
если я правильно понял вам нужно использовать "наследование"

Код:
//пример наследования

class car{
private:
    int KmReport
public:
    void setKmReport(int a);
    int getKmReport(void); 
};

class drive : public car{
private:
    //то что есть только у drive
public:
    //то что есть только у drive
};

//пример использования
drive obj;
obj.setKmReport(111);
obj.getKmReport();

//или через указатель на объект типа drive
drive *p;
p=&obj;
p->setKmReport(111);
p->getKmReport();
а вообще настоятельно советую прочесть книгу
Герберт Шилдт С++ Базовый Курс
C++ from the Ground Up

есть в форматах djvu pdf fb2
на рутрекере 100% есть :)
261
07 декабря 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: ProkletyiPirat

arrjj
если я правильно понял вам нужно использовать "наследование"



Нет, не правильно - просто у ТС в вопросе с названиями классов напутано - я исправил в своем посте.

Да и нет там никакого наследования - исходя из задачи ТС нужен независимый класс с доступом к переменной другого класса, я написал пример через get/set методы (наиболее похоже по смыслу к коду ТС)

70K
07 декабря 2012 года
ProkletyiPirat
76 / / 25.07.2012
arrjj извиняюсь не тот ник указал (уже исправил)

а что касается вашего кода то я не понял что вы хотите сделать вызывая car(); (про get/set методы я понял)
но сейчас вопросов нет.
86K
07 декабря 2012 года
lav007
2 / / 07.12.2012
Вообще я не много сморозил!

Код:
cpp.

void Auto::setKmReport()
{
     KmReport =0 // машина не сколько не проехала первоначально
}

Auto::getKmReport(void)
{
return KmReport;
}

// с этого момента я не увер что я делаю.
int Drive::drive_length(*Car)
{
int value;
cout << "Enter length of race:  ";
cin >> value;

// если это вообще правильно(все выше стоящие)
}
Там где Auto доджно быть Car.
тоесть так
Код:
cpp.

void Car::setKmReport()
{
     KmReport =0 // машина не сколько не проехала первоначально
}

Car::getKmReport(void)
{
return KmReport;
}

// с этого момента я не увер что я делаю.
int Drive::drive_length(int *Car)
{
int value;
cout << "Enter length of race:  ";
cin >> value;

// если это вообще правильно(все выше стоящие)
}
class Auto
{
private:
car(); // этого у меня вообще нету......

Так нужно "наследование" или так как arrjj изначально предложил.

И спасибо за помощь!
Вы даже не знаете как вы мне помогли!
441
07 декабря 2012 года
cronya
420 / / 03.01.2009
как то так наверно :)
main.cpp
Код:
#include <iostream>
#include "transport.h"

using namespace std;

int main()
{
    transport* newptr = transport :: setAuto(1,200);
    cout << "Car = " << newptr->get() << endl;
    system("pause");
    return 0;
}
car.h
Код:
#ifndef __car__
#define __car__

#include "transport.h"

class car : public transport
{
    private:
        int param;
    public:
        void set(int value);
        int get();
};

#endif
car.cpp
Код:
#include "car.h"

void car :: set(int value)
{
    param = value;
}

int car :: get()
{
    return param;
}
bus.h
Код:
#ifndef __bus__
#define __bus__

#include "transport.h"

class bus : public transport
{
    private:
        int param;
    public:
        void set(int value);
        int get();
};

#endif
bus.cpp
Код:
#include "bus.h"

void bus :: set(int value)
{
    param = value;
}

int bus :: get()
{
    return param;
}
transport.h
Код:
#ifndef __transport__
#define __transport__

class transport
{
    public:
        static transport* setAuto(int id, int value);
        virtual void set(int value) = 0;
        virtual int get() = 0;
};

#endif
transport.cpp
Код:
#include "transport.h"
#include "car.h"
#include "bus.h"

transport* transport :: setAuto(int id, int value)
{
    transport* ptr;
    switch (id)
    {
        case 1:
            ptr = new car;
            break;
        case 2:
            ptr = new bus;
            break;     
    }
    ptr->set(value);
    return ptr;
}
Если без наследование, то дружественная функция так
main.cpp
Код:
#include <iostream>
#include "transport.h"

using namespace std;

int main()
{  
    transport point;
    set(100, &point);
    cout << "Car = " << get(&point);
    system("pause");
    return 0;
}

void set(int value, transport *ptr)
{
    ptr->param = value;
}

int get(transport *ptr)
{
    return ptr->param;
}
transport.h
Код:
#ifndef __transport__
#define __transport__

class transport
{
    private:
        int param;
    public:
        friend void set(int value, transport *ptr);
        friend int get(transport *ptr);
};

#endif

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог