Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
#1

Вопрос по классам - C++

21.10.2010, 19:52. Просмотров 1102. Ответов 25
Метки нет (Все метки)

Опишу определение базавого класса и производного
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Date
{
  private:
           ...
  public:
           Date( ){};
           virtual ~Date(){};
           
           virtual Date& GetDate();  
           Date& dateadd(int, Date&);  
};
 
class DateTime : public Date
{
  private:
           ...
  public:
           DateTime(){};// 
           virtual ~DateTime(){};
           
           virtual DateTime& GetDate();
}; 
 
Date d;
DateTime dt;
хочу для производного класса вызвать метод из класса Date, но класс Date ожидает второй параметр
Date&, но я хочу передать именно DateTime

C++
1
dt.dateadd(5,dt);
, что мне поможет RTTI (dynamic_cast), если да то как это использовать?
Всем спассибо за ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2010, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по классам (C++):

Вопрос по классам - C++
Есть такой код #include <iostream> class C1{ public: C1(){std::cout <<" 1 is open"<<std::endl;}; ~C1(){std::cout <<" 1...

Вопрос по классам - C++
Вообщем есть два класса, TTriangular и TPoint. В TTriangular есть метод, который должен вводить координаты заданной точки. В TPoint...

Вопрос по классам - C++
создал конструктор, который создаёт элемент класса - массив, а вот инициализация данного массива с помощью нового конструктора не...

Вопрос по Классам... - C++
#include <iostream> using std::cout; using std::endl; class GradeBook { public: void displayMessage()

Вопрос по классам и функциям - C++
Здравствуйте, вообщем мне надо реализовать примерно такое дело: имеется класс the_class нужно чтобы у каждого экземпляра была...

У меня вопрос по классам. На приложенных картинках я выделил непонятные строки. - C++
У меня вопрос по классам. На приложенных картинках я выделил непонятные строки. Строка 9. Переменная int age объявляется в строке 9?...

25
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.10.2010, 19:57 #2
obuhanoe, static_cast<T> вполне поможет
А если сделать ее виртуальной в базовом - можно и без приведения вроде
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
21.10.2010, 19:58 #3
Во-первых, наследование не совсем правильно концептуально. DateTime включает Date, но не наследует.

Если хотите оставить иерархию, переопределите dateadd с новым аргументом DateTime&.
И да, кстати. Что делает функция ? Если есть дата 1.01.2001, что будет, если вы прибавите 5 "1.02.2008" ? Добавиться 5.05.10040 ? Вообще говоря, даты нельзя суммировать. Как и DateTime.
0
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
21.10.2010, 20:05  [ТС] #4
Andrew_Lvov - функция dateadd работает у меня идентично как функция у MSSQL
берется дата и прибавляется или отнмается дни месяцы годы в зависимости от того что я хочу с ней сделать, я специально не приводит полное описание.

И почему вы пишите что DateTime не наследует Date
C++
1
2
3
class DateTime : public Date
{
};
и в классе DateTime переопределяется GetDate, что же в Вашем понятии тогда наследование?

Lavroff - спасибо!
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.10.2010, 20:06 #5
obuhanoe, Концепция наследования раскрыта неверно. Только и всего
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
21.10.2010, 20:13 #6
obuhanoe, если вам интересно моё мнение, в MYSQL - функция, а у вас - метод класса.
Какая разница? Разница в том, что метод класса подразумевает операцию над объектом класса, если метод, конечно, нестатический.
Если метод не использует данных объекта, для к-рого он вызван, это введёт в заблуждение пользователя класса, не знакомого с реализацией.
0
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
21.10.2010, 20:17  [ТС] #7
Lavroff - т.е. если я переопределю в производном классе dateadd, наследование будет более полное и верное?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.10.2010, 20:21 #8
obuhanoe, Вроде как сама концепция... Но я же не знаю, что у вас обозначают эти два класса.
0
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
21.10.2010, 20:26  [ТС] #9
Andrew_Lvov - я наверное в общих чертах объяснил как работает dateadd поясню
конструктор Date при инициализации защищенным данным присваивает текущую дата, а при вызове dateadd я увеличиваю или уменьшаю текущую дату и соответсвенно все это храню в private данных
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
21.10.2010, 20:46 #10
obuhanoe, если вы изменяете текущую дату (допустим на int дней), зачем тогда второй аргумент ?
0
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
21.10.2010, 20:50  [ТС] #11
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
зачем тогда второй аргумент ?
согласен, можно его и не использовать, а использовать указатель this.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
21.10.2010, 20:52 #12
obuhanoe, Я бы сказал нужно, если функция - член класса.
1
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
21.10.2010, 20:57 #13
Цитата Сообщение от obuhanoe Посмотреть сообщение
хочу для производного класса вызвать метод из класса Date, но класс Date ожидает второй параметр
Date&, но я хочу передать именно DateTime

C++
1
dt.dateadd(5,dt);
, что мне поможет RTTI (dynamic_cast), если да то как это использовать?
Всем спассибо за ответы.
У вас изначально все синтаксически корректно. Указателю и ссылке на базовый класс можно присваивать объекты классов-потомков (указателю адрес, а ссылке - сам объект), так как объект производного класса является в то же время объектом любого из своих классов-предков. На этом, собственно, и зиждется механизм полиморфного поведения классов.
Можно даже объекту базового класса присвоить объект производного класса, но там срезка произойдет.
0
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
26.10.2010, 17:23  [ТС] #14
ну вот добрался до инета и приведу пример и обяъсните почему у меня так получается...т.е. не верно
*.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef CLASS_DATE_H_INCLUDED
#define CLASS_DATE_H_INCLUDED
 
#include <iostream>
#include <ctime>
 
using namespace std;
 
//====================================К==Л==А==С==С==Ы=============================================
// Класс для работы с датой
class Date
{
  public:
           enum Month{jan = 1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec,unk};
 
           Date(int dd = 0, Month mm = Month(0), int year = 0);
 
           //Деструктор
           virtual ~Date(){};
           friend ostream& operator<< (ostream&, const Date&);
 
           //TEST
           void Test(Date&);
 
 
  private:
           int day, year, temp;
           Month month;
 
};
 
//Производный класс от Date
class DateTime : public Date
{
  public:
           DateTime(int dd, Month mm, int yy);
           virtual ~DateTime(){};
           friend ostream& operator<< (ostream&, const DateTime&);
 
  private:
           int dt_day, dt_year, dt_hour, dt_min, dt_sec;
           Month dt_month;
};
 
#endif // CLASS_DATE_H_INCLUDED
1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "Class_date.h"
// Описание класса для работы с датой
Date::Date(int dd, Month mm, int yy)
{
    day   = dd;
    month = mm;
    year  = yy;
 
}
 
 
//Дружественная функция для просмотра даты
ostream& operator<<(ostream& os, const Date& d)
{
  string str_d, str_m;
  str_d = str_m = "";
 
  if (d.day   < 10) str_d = "0";
  if (d.month < 10) str_m = "0";
 
  return (os << str_d << d.day << "." << str_m << d.month << "." << d.year);
}
 
 
void Date::Test(Date& da)
{
    temp = da.day;
    cout << da.year << " " <<temp <<endl;
 
}
 
 
//Производный класс от Date
DateTime::DateTime(int dd, Month mm, int yy)
{
  dt_day   = dd;
  dt_month = mm;
  dt_year  = yy;
  dt_hour  = 0;
  dt_min   = 0;
  dt_sec   = 0;
 
}
 
 
ostream& operator<<(ostream& os, const DateTime& dt)
{
  string str_d, str_m;
  str_d = str_m = "";
 
  if (dt.dt_day   < 10) str_d = "0";
  if (dt.dt_month < 10) str_m = "0";
 
  return (os << str_d << dt.dt_day << "." << str_m << dt.dt_month << "." << dt.dt_year << " " << dt.dt_hour << ":" << dt.dt_min << ":" << dt.dt_sec);
 
}
2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "Class_date\\Class_Date_realiz.cpp"
 
 
using namespace std;
 
//=================================================================
int main (int argc, char* argv[]) // когда передаем 2 значения
{
 
   Date da(14, Date::Month(3),2007);
   DateTime dt(22,DateTime::Month(11),2009);
 
   da.Test(da);
   dt.Test(dt);
 
 
   return 0;
}
Так вот когда я запускается dt.Test(dt);
данные по нулям выводит, что я не учел....
даже если поределить так
C++
1
2
//TEST
           void Test();
и использовать внутри функции this результат тот же.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
26.10.2010, 17:27 #15
obuhanoe,
C++
1
#include "Class_date\\Class_Date_realiz.cpp"
Мб
C++
1
#include "Class_date.h"
?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2010, 17:27
Привет! Вот еще темы с ответами:

Литература по классам - C++
Посоветуйте какую-то книгу где хорошо описано объявления, как работать с классами и все о классах!

Программа по классам - C++
Нужна помощь по классам, помогите с написание кода Описать класс, реализующий стек и работу с ним. 1.) Класс должен содержать следующие...

учебник по классам - C++
Люди, подскажите, пожалуйста, где можно найти хороший учебник по классам с примерами задач

лабораторная по классам - C++
Доброго вечера ув. гуру. Очень прошу вас помочь написать небольшую программу, связанной с великим ООП, а конкретнее работой с классами....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
26.10.2010, 17:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru