.h файл
class car
{
privat:
int KmReport
public
void setKmReport()
getKmReport(void)
};
class Drive
{
public:
int drive_length(* Car);
};
Как использовать переменную из одного класса в другом с помощью указателей?
Я давно не живу в русско язычной стране, так что могут быть ошибки.
У меня такая проблема.
Мне надо создать два класса и третьим классом этими двумя классами управлять. Но у меня ни чего не получается.
Вот пример.
Код:
Класс 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;
// если это вообще правильно(все выше стоящие)
}
void Auto::setKmReport()
{
KmReport =0 // машина не сколько не проехала первоначально
}
Auto::getKmReport(void)
{
return KmReport;
}
// с этого момента я не увер что я делаю.
int Drive::drive_length(*Car)
{
int value;
cout << "Enter length of race: ";
cin >> value;
// если это вообще правильно(все выше стоящие)
}
Код:
//.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();
}
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();
}
я не понял что именно вы хотите сделать сей строчкой:
Код:
//.h
class Auto
{
private:
car(); //что именно вы хотите тут сделать?? вызвать конструктор которого нет?
int KmReport; //но зачем тогда переопределять?
public:
void setKmReport(int km);
void resetKmReport();
int getKmReport();
};
class Auto
{
private:
car(); //что именно вы хотите тут сделать?? вызвать конструктор которого нет?
int KmReport; //но зачем тогда переопределять?
public:
void setKmReport(int km);
void resetKmReport();
int getKmReport();
};
У меня такая проблема.
Мне надо создать два класса и третьим классом этими двумя классами управлять. Но у меня ни чего не получается.
Вот пример.
Мне надо создать два класса и третьим классом этими двумя классами управлять. Но у меня ни чего не получается.
Вот пример.
во первых классы не создаются! они лишь описывают объект ! (реально же объекта не существует до строчки вида тип имя_переменной)
во вторых
Код:
int drive_length(* Car); //сия запись неправильна !
/* общий вид всех функций (методов) любого класса */
тив_возвращаемого_значения область_видимости :: имя_функции (ТИП_переменной ИМЯ_переменной) { тело функции }
/* в вашем примере не хватает */
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();
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% есть :)
Цитата: ProkletyiPirat
arrjj
если я правильно понял вам нужно использовать "наследование"
Нет, не правильно - просто у ТС в вопросе с названиями классов напутано - я исправил в своем посте.
Да и нет там никакого наследования - исходя из задачи ТС нужен независимый класс с доступом к переменной другого класса, я написал пример через get/set методы (наиболее похоже по смыслу к коду ТС)
а что касается вашего кода то я не понял что вы хотите сделать вызывая car(); (про get/set методы я понял)
но сейчас вопросов нет.
Код:
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;
// если это вообще правильно(все выше стоящие)
}
void Auto::setKmReport()
{
KmReport =0 // машина не сколько не проехала первоначально
}
Auto::getKmReport(void)
{
return KmReport;
}
// с этого момента я не увер что я делаю.
int Drive::drive_length(*Car)
{
int value;
cout << "Enter length of race: ";
cin >> value;
// если это вообще правильно(все выше стоящие)
}
тоесть так
Код:
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;
// если это вообще правильно(все выше стоящие)
}
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;
// если это вообще правильно(все выше стоящие)
}
{
private:
car(); // этого у меня вообще нету......
Так нужно "наследование" или так как arrjj изначально предложил.
И спасибо за помощь!
Вы даже не знаете как вы мне помогли!
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;
}
#include "transport.h"
using namespace std;
int main()
{
transport* newptr = transport :: setAuto(1,200);
cout << "Car = " << newptr->get() << endl;
system("pause");
return 0;
}
Код:
#ifndef __car__
#define __car__
#include "transport.h"
class car : public transport
{
private:
int param;
public:
void set(int value);
int get();
};
#endif
#define __car__
#include "transport.h"
class car : public transport
{
private:
int param;
public:
void set(int value);
int get();
};
#endif
Код:
#include "car.h"
void car :: set(int value)
{
param = value;
}
int car :: get()
{
return param;
}
void car :: set(int value)
{
param = value;
}
int car :: get()
{
return param;
}
Код:
#ifndef __bus__
#define __bus__
#include "transport.h"
class bus : public transport
{
private:
int param;
public:
void set(int value);
int get();
};
#endif
#define __bus__
#include "transport.h"
class bus : public transport
{
private:
int param;
public:
void set(int value);
int get();
};
#endif
Код:
#include "bus.h"
void bus :: set(int value)
{
param = value;
}
int bus :: get()
{
return param;
}
void bus :: set(int value)
{
param = value;
}
int bus :: get()
{
return param;
}
Код:
#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
#define __transport__
class transport
{
public:
static transport* setAuto(int id, int value);
virtual void set(int value) = 0;
virtual int get() = 0;
};
#endif
Код:
#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;
}
#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;
}
#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;
}
Код:
#ifndef __transport__
#define __transport__
class transport
{
private:
int param;
public:
friend void set(int value, transport *ptr);
friend int get(transport *ptr);
};
#endif
#define __transport__
class transport
{
private:
int param;
public:
friend void set(int value, transport *ptr);
friend int get(transport *ptr);
};
#endif