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

классы/дочерние классы/методы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Даны такие сведения о 100 работниках фирмы http://www.cyberforum.ru/cpp-beginners/thread228364.html
Помогите пожалуйста решить 2 задачи 1. Даны такие сведения о 100 работниках фирмы: фамилии сотрудника, должность, оклад. Вывести фамилию бухгалтера, который имеет минимальной оклад. Вывести фамилии...
C++ Битовые операции С помощью битовых операций выести на экран значение к-ого спарва бита. Помогите пожалуйста!что-то в этих битовых операциях не разбираюсь.... http://www.cyberforum.ru/cpp-beginners/thread228357.html
// не работает C++
Установил VS 2010. Действую согласно текста книги Герберта Шилдта "С++ руководство для начинающих" (второе издание). - набираю текст /* Это простая С++-программа. Назовите этот файл...
C++ Определите, у какой из трех фигур площадь меньше
Начала изучать С++.Задали решить задачу,но сама к сожалению не могу сообразить.Может кто нибудь предложит варианты решения???Жду ответов!Заранее огромное СПАСИБО!:)Вот условие: Определите, у какой...
C++ Ссылки, указатели и массивы http://www.cyberforum.ru/cpp-beginners/thread228339.html
Что-то не лезут в голову указатели и ссылки. Вот как я всё понимаю: Ссылки. Ссылочные переменные ссылаются на адрес уже существующих переменных, и изменяя их, вы изменяете саму переменную....
C++ Массивы прошу помогите решить очень легкую задачку. дан массив из N элементов,найти максимум по четным элементам массива,и минимум по нечетным. подробнее

Показать сообщение отдельно
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.01.2011, 20:09
Через виртуальную функцию, имеющуюся в базовом классе и перегруженную в дочерних классах.
Про виртуальные функции лучше прочитать отдельно в каком-нибудь учебнике.

В следующем примере виртуальная функция ClassCode возвращает признак типа класса, по которому можно определить, какой класс находится в переменной-указателе на родительский класс. Так же присутствует виртуальная функция Print, которая печатает данные класса.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <cstdio>
#include <cstring>
#include <cstddef>
#include <ctime>
#include <cstdlib>
 
class Book {
 public:
  Book() : name_(NULL), author_(NULL) {}
  Book(const char *name, const char *author)
    : name_(NULL), author_(NULL) {
    set_name(name);
    set_author(author);
  }
  virtual ~Book() {
    if (name_ != NULL) delete name_;
    if (author_ != NULL) delete author_;
  }
  void set_name(const char *name) {
    if (name_ != NULL)
      delete name_;
    name_ = new char[strlen(name) + 1];
    strcpy(name_, name);
  }
  void set_author(const char *author) {
    if (author_ != NULL)
      delete author_;
    author_ = new char[strlen(author) + 1];
    strcpy(author_, author);
  }
  char *name() const { return name_; }
  char *author() const { return author_; }
  inline virtual void Print() {
    printf("Name: %s\nAuthor: %s\n", name_, author_);
  };
  virtual int ClassCode() const {
    return 0;
  }
 private:
  char *name_;
  char *author_;
};
 
class TextBook : public Book {
 public:
  TextBook() : Book(), subject_(NULL) {}
  TextBook(const char *name, const char *author)
    : Book(name, author), subject_(NULL) {
  }
  TextBook(const char *name, const char *author, const char *subject)
    : Book(name, author), subject_(NULL) {
    set_subject(subject);
  }
  ~TextBook() {
    if (subject_ != NULL)
      delete subject_;
  }
  void set_subject(const char *subject) {
    if (subject_ != NULL)
      delete subject_;
    subject_ = new char[strlen(subject) + 1];
    strcpy(subject_, subject);
  }
  char *subject() const {
    return subject_;
  }
  virtual int ClassCode() const {
    return 1;
  }
  inline virtual void Print() {
    Book::Print();
    printf("Subject: %s\n", subject_);
  };
 private:
  char *subject_;
};
 
class AnyBook : public Book {
 public:
  AnyBook() : Book() {}
  AnyBook(const char *name, const char *author)
    : Book(name, author) {}
  virtual int ClassCode() const {
    return 2;
  }
};
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  const int k_book_count = 10;
  Book *books[k_book_count];
 
  for (int i = 0; i < k_book_count; ++i) {
    int random_number = rand() % 3;
    if (random_number == 0)
      books[i] = new Book("Some book", "Some author");
    else
    if (random_number == 1)
      books[i] = new TextBook("Some textbook", "Other author", "A subject.");
    else
    if (random_number == 2)
      books[i] = new AnyBook("Any book", "An author");
  }
 
  for (int i = 0; i < k_book_count; ++i) {
    if (books[i]->ClassCode() == 1)
      books[i]->Print();
  }
 
  for (int i = 0; i < k_book_count; ++i)
    delete books[i];
 
  return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru