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

Сравнение наследников - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ среднеарифметическое а1, а2, а3 http://www.cyberforum.ru/cpp-beginners/thread89210.html
Привет народ! Очень нужна помощь!!! Даны действительные числа а1, а2, ... , аn. (а1>0). Вычислить до первого отрицательного числа: среднеарифметическое а1, а2, а3. :tender:
C++ Даны целые числа а1, а2, ... , аn Добрый вечер добрые люди. Мне очень нужна ваша помощь. Большое спасибо. Вот задачи: 1. Найти все натуральные числа, не превосходящие N<1000,и делящиеся на каждую из своих цифр. 2. Даны целые числа а1, а2, ... , аn (среди них могут быть повторяющиеся). Получить все числа, входящие в последовательность по одному разу 3. Даны целые числа а1, а2, ... , аn (среди них могут быть повторяющиеся).... http://www.cyberforum.ru/cpp-beginners/thread89208.html
C++ Удаление последнего столбца динамической матрицы
Здрасти, я все со своими массивами. У меня есть двумерный динамический массив Matrix 6*4. Удаление последнего столбца надо так делать?: delete Matrix;
Разложение в ряд. C++
Нужна помощь.Вычисление логарифма по основанию два вещественного числа...дан ряд n(x+1)=x-x^2/2+x^3/3-.....x^n/n - разложение натурального логарифма в ряд....потом из свойства логарифмов log2(N)=ln(n)/ln(2),помогите а то отчисляют......
C++ вывести Наименьшее количество элементов, которое нужно удалить, чтоб осталась возрастающая последовательность http://www.cyberforum.ru/cpp-beginners/thread89171.html
Нужно в массиве вывести Наименьшее количество элементов, которое нужно удалить, чтоб осталась возрастающая последовательность
C++ Динамическое распределение памяти Добрый вечер, помогите пожалуйста разобраться с задачкой!!! Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки размера nxn??? Буду рад любой помощи!!! подробнее

Показать сообщение отдельно
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
25.01.2010, 11:34     Сравнение наследников
вот решение? твоей проблемы, используя двойную диспетчеризацию.
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
class Derived1;
class Derived2;
 
class Base {
public:
  virtual bool operator==(Base*) = 0;
  virtual bool operator==(Derived1*) = 0;
  virtual bool operator==(Derived2*) = 0;
 
  virtual ~Base() { }
};
 
class Derived1 : public Base {
  friend class Derived2;
  int v_;
public:
  Derived1(int v) : v_(v) { }
 
  virtual bool operator==(Base *base) {
    return base->operator==(this);
  }
  virtual bool operator==(Derived1 *d1) { 
    return v_ == d1->v_; 
  }
  virtual bool operator==(Derived2 *d2) { 
    return d2->x_ + d2->y_ == v_;
  }
};
 
class Derived2 : public Base {
  friend class Derived1;
  int x_, y_;
public:
  Derived2(int x, int y) : x_(x), y_(y) { }
 
  virtual bool operator==(Base *base) {
    return base->operator==(this);
  }
  virtual bool operator==(Derived1 *d1) { 
    return x_ + y_ == d1->v_; 
  }
  virtual bool operator==(Derived2 *d2) { 
    return x_ + y_ == d2->x_ + d2->y_; 
  }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
  Base *d1 = new Derived1(70);
  Base *d2 = new Derived2(30, 40);
  
  bool result = d1->operator==(d2);
 
  return 0;
}
Добавлено через 1 минуту
***
ну а вот более простой пример на саму double dispatch
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
// 619.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class Triangle;
class Square;
class Circle;
 
class Shape {
public:
  virtual void intersection(Shape*) = 0;
  virtual void intersection(Triangle*) = 0;
  virtual void intersection(Square*) = 0;
  virtual void intersection(Circle*) = 0;
 
  virtual ~Shape() { }
};
 
class Circle : public Shape {
public:
  virtual void intersection(Shape *shape) {    
    shape->intersection(this);
  }
  virtual void intersection(Triangle *triangle) { 
    cout << "Triangle with Circle" << endl;
  }
  virtual void intersection(Square *square) { 
    cout << "Square with Circle" << endl;
  }
  virtual void intersection(Circle *circle) { 
    cout << "Circle with Circle" << endl;
  }
};
 
class Triangle : public Shape {
public:
  virtual void intersection(Shape *shape) {    
    shape->intersection(this);
  }
  virtual void intersection(Triangle *triangle) {     
    cout << "Triangle with Triangle" << endl;
  }
  virtual void intersection(Square *square) { 
    cout << "Square with Triangle" << endl;
  }
  virtual void intersection(Circle *circle) { 
    cout << "Circle with Triangle" << endl;
  }
};
 
class Square : public Shape {
public:
  virtual void intersection(Shape *shape) {    
    shape->intersection(this);
  }
  virtual void intersection(Triangle *triangle) { 
    cout << "Triangle with Square" << endl;
  }
  virtual void intersection(Square *square) { 
    cout << "Square with Square" << endl;
  }
  virtual void intersection(Circle *circle) { 
    cout << "Circle with Square" << endl;
  }
};
 
void intersection(Shape *lhs, Shape *rhs) {
  lhs->intersection(rhs);
}
int _tmain(int argc, _TCHAR* argv[])
{
  Circle c;
  Square s;
  Triangle t;  
  intersection(&c, &t);
  return 0;
}
 
Текущее время: 00:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru