Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Даны такие сведения о 100 работниках фирмы https://www.cyberforum.ru/ cpp-beginners/ thread228364.html
Помогите пожалуйста решить 2 задачи 1. Даны такие сведения о 100 работниках фирмы: фамилии сотрудника, должность, оклад. Вывести фамилию бухгалтера, который имеет минимальной оклад. Вывести фамилии...
Битовые операции C++
С помощью битовых операций выести на экран значение к-ого спарва бита. Помогите пожалуйста!что-то в этих битовых операциях не разбираюсь....
// не работает C++
Установил VS 2010. Действую согласно текста книги Герберта Шилдта "С++ руководство для начинающих" (второе издание). - набираю текст /* Это простая С++-программа. Назовите этот файл...
C++ Определите, у какой из трех фигур площадь меньше Начала изучать С++.Задали решить задачу,но сама к сожалению не могу сообразить.Может кто нибудь предложит варианты решения???Жду ответов!Заранее огромное СПАСИБО!:)Вот условие: Определите, у какой... https://www.cyberforum.ru/ cpp-beginners/ thread228342.html
C++ Ссылки, указатели и массивы https://www.cyberforum.ru/ cpp-beginners/ thread228339.html
Что-то не лезут в голову указатели и ссылки. Вот как я всё понимаю: Ссылки. Ссылочные переменные ссылаются на адрес уже существующих переменных, и изменяя их, вы изменяете саму переменную....
Массивы C++
прошу помогите решить очень легкую задачку. дан массив из N элементов,найти максимум по четным элементам массива,и минимум по нечетным.
Битовые операции C++
Народ дайте ссылку пожалуйста на задачи по сишке где нужно использовать битовые операции! Желательно с решениями!
C++ дописать строковый тип данных в си++ допишите кто-нибудь программу, только полегче, с комментариями. Заранее спасибо.ТОЛЬКО БЕЗ УКАЗАТЕЛЕЙ Задача Даны две строки, содержащие не более 100 символов. Строки состоят из слов,... https://www.cyberforum.ru/ cpp-beginners/ thread228318.html
C++ функция возврата булевого значения https://www.cyberforum.ru/ cpp-beginners/ thread228317.html
Здравствуйте!Помогите пожалуйста,объясните! вот есть функция : bool check_signs(char a,char *signs) { int i; for (i=0;i<strlen(signs);i++){ if(a==signs) return false; } return true;
C++ Реализовать игру человека и машины по заполнению “Греко-латинского квадрата” Помогите решить программу на C++. “Греко-латинским квадратом” порядка N называют матрицу (N, N), в каждом столбце, каждой строке и обеих диагоналях которого содержатся все целые числа от1 до N .... https://www.cyberforum.ru/ cpp-beginners/ thread228309.html
3053 / 1458 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
13.01.2011, 20:09 0

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

13.01.2011, 20:09. Просмотров 4750. Ответов 11
Метки (Все метки)

Ответ

Через виртуальную функцию, имеющуюся в базовом классе и перегруженную в дочерних классах.
Про виртуальные функции лучше прочитать отдельно в каком-нибудь учебнике.

В следующем примере виртуальная функция 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2011, 20:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Классы, поля, методы
Добрый день господа. Хотелось бы услышать мнение и советы более опытных людей. Пишу приложение для...

Классы и методы, перегрузка операторов == и !=
не могу разобраться с перегрузкой операторов == или != для 2 массивов типа char и int состоящих из...

Классы, функции методы класса, наследование
Задание: Объявите класс Tarray, создающий тип &quot;Массив&quot;. Определите элементы-данные класса: -...

Зачем нужны абстрактные классы и методы?
Можете объяснить в чём смысл абстрактного класса? Ведь с тем же успехом я могу написать: ...

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