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

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

Войти
Регистрация
Восстановить пароль
 
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 96
#1

Класс с добавлением функций - C++

01.07.2015, 15:38. Просмотров 212. Ответов 6
Метки нет (Все метки)

День добрый!

Возникла вот какая нужда. Есть объекты одного класса, взаимодействие этих объектов обычно происходит одинаково, но возможно что с тем или иным обёктом нужно взаимодействовать по особому. Эта функция для взаимодействия будет уникальна только для одного объекта.

Вопрос, можно ли как-то добавить функцию к какому-то объекту или может быть привязать к нему ссылку на функцию что ли.

Заранее спасибо за ответы!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 15:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс с добавлением функций (C++):

Функции работы со строками, отличие функций с добавлением _s - C++
При работе с строками в VS 2012, увидел от него предупреждение при использовании функций gets(), strcat() и др. Ругается что они являются...

Создать класс из набора функций - C++
нужно оформить все в класс пока есть только вот это class String { private: char str; public: void getStr ()

Перегрузка функций (Создать класс Set ) - C++
Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами: "+" – объединение, "*"...

Класс «Номер телефона», проблема с парой функций - C++
Есть задание (ниже). Я сделал всё из обоих пунктов, но функции Out_All ShowSameCode ShowSameType Find не работают . Никак не могу понять...

На базе набора функций создать полиморфный класс - C++
#include <iostream> #include <math.h> #include <windows.h> #include <iomanip> using namespace std; bool done = 0; ...

Разработать класс с набором функций для управления односвязным списком - C++
Добрый день, форумчане! Обращаюсь к вам с просьбой, с чего начать мне выполнение данного задания, какие элементы использовать. Или хотя...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nick Alte
Эксперт С++
1638 / 1010 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.07.2015, 15:42 #2
Судя по описанию, это работа для виртуальных функций.
1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
01.07.2015, 15:43 #3
А простое наследование - разве не то, что надо?
C++
1
2
3
4
5
6
7
class A
{
};
class B:public A
{
   void SpecialMetod();
};
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
01.07.2015, 15:45 #4
а оно тебе зачем? Если что-то происходит по-особому, то это по-любому объект не того же класса.
Можешь, поконкретнее описать ситуацию, что это за объекты такие странные?
В общем случае, можно посоветовать использовать указатель на функцию, но такое решение оно вообще к ООП слабо относится.

Добавлено через 1 минуту
zss, наследоваться может класс, а не объект. Тебе придётся писать целый новый класс, который может иметь множество экземпляров, для этого "особого" поведения. А речь про объекты.
1
krazyd
16 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 96
01.07.2015, 15:51  [ТС] #5
Если конкретнее, то скажем есть у меня три системы координат. Две из них абсолютно одинаковы и отличаются лишь ориентацией осей. Связь между ними простая. А третья - абсолютно другая. И связь с ней происходит совсем подругому.
0
Nick Alte
Эксперт С++
1638 / 1010 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.07.2015, 18:50 #6
В такой постановке задача начинает выглядеть уже по-другому. Начнём с того, что с точки зрения хорошего дизайна, координатная система не будет являться объектом. Объектом будут координаты. Можно определить типы для разных видов координат и преобразования между ними. Например, так:
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
class DescartesLeft { // Левосторонние декартовы координаты
public:
    DescartesLeft(double X, double Y, double Z): x(X), y(Y), z(Z) {} // Задание напрямую
    double x, y, z;  // Данные надо бы прятать в private, но тут можно и так
};
 
class DescartesRight {  // Правосторонние декартовы координаты
public:
    DescartesRight(double X, double Y, double Z): x(X), y(Y), z(Z) {}  // Задание напрямую
    DescartesRight(const DescartesLeft& dl): x(dl.x), y(dl.y), z(-dl.z) {}  // Преобразуем из левосторонних координат, меняя знак по оси Z
    operator DescartesLeft() const {return DescartesLeft(x, y, -z);}  // Преобразование в левосторонние координаты
    double x, y, z;
};
 
class Sperical {// Сферические координаты
public:
    Spherical(double Phi, double Lambda, double R): phi(Phi), lambda(Lambda), r(R) {}  // Задание напрямую
    Spherical(const DescartesLeft& dl);  // преобразование из левосторонних декартовых, математику опускаю
    Spherical(const DescartesRight& dr);  // в C++11 можно преобразовать аргумент в DescartesLeft и перекинуть в предыдущий конструктор
    operator DescartesLeft() const  // Преобразование в левосторонние декартовы
    {   // Реализуем хотя бы это преобразование, для примера
        return DescartesLeft(
            r * cos(phi) * cos(lambda),
            r * sin(phi),
            r * cos(phi) * sin(lambda)
        );
    }
    operator DescartesRight() const;  // Преобразование в правосторонние декартовы
    double phi, lambda, r;  // широта, долгота, расстояние
};
 
// Использование
void foo(const DescartesLeft& coords);
 
void bar()
{
    DescartesLeft dl(1, 2, 3);
    foo(dl);  // Используем значение напрямую
    Spherical s(0.7, 3.14, 42);
    foo(s);  // Из сферических координат создаются левосторонние декартовы и перекидываются в foo
    DescartesRight dr = s;  // И так можно
}
1
Fallenworld
76 / 76 / 9
Регистрация: 14.04.2014
Сообщений: 408
01.07.2015, 19:50 #7
надо делать базовый класс координат с виртуальными функциями, которые мастхев(даже не знаю какие)
а в наследниках уже переопределять их.
тогда можно будет пилить методы типа
setChoordSystem(const ChoordSystem& cs);

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

как я понял ТС хочет зделать связанные системы координат. Тогда надо в каждой еще указатель на товарища(или контейнер с указателями)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 19:50
Привет! Вот еще темы с ответами:

Абстрактный класс без виртуальных функций - C++
Мне нужен класс без виртуальных функций, но чтобы его нельзя было создать. Можно ли такое реализовать?

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

Реализовать шаблонный класс "Матрица" (шаблоны классов и функций) - C++
Написать код программы на С++ Разработать шаблонные функции и классы. класс МАТРИЦА. Для класса реализовать: конструктор с параметрами...

Создать класс "Банкомат" с реализацией функций банкомата. - C++
Всем привет. Есть задание: создать класс "банкомат" с реализацией функций банкомата. То есть это определение клиента (можно по номеру карты...


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

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

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