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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.70
JamesBlack
37 / 37 / 3
Регистрация: 28.07.2009
Сообщений: 144
#1

Методы класса - C++

30.10.2009, 00:07. Просмотров 6236. Ответов 12
Метки нет (Все метки)

Я щас организую разреженную матрицу через двусвязный упорядоченый циклический список... ну да не суть.

У меня такой вопрос - я сейчас делаю для класса различные методы, хочу сделать перемножение матриц. В любом случае, для этого понадобятся 2 исходные матрицы и 1 выходная. Выходную я буду создавать внутри метода и возвращать из него ссылку на нее. Проблема с исходными стала такой - очень глупо (как мне кажется) передавать в метод одну матрицу указателем через параметры, а другую как this. Как можно сделать так, чтобы в метод не передавался объект класса напрямую? т.е. чтобы я мог писать не так:
C++
1
2
3
4
matrix *a, *b, *c;
a = new matrix(...);
b = new matrix(...);
c = a->Multiply(b);
а так:
C++
1
2
3
4
matrix *a, *b, *c;
a = new matrix(...);
b = new matrix(...);
c = Multiply(a, b);
Или тогда придется просто создавать ф-ию вне класса? Просто есть языки, где такие методы возможны, в моем учебнике по Си я такого не увидел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2009, 00:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы класса (C++):

Методы класса внутри определения класса - C++
Все привет! Решил закрепить свои знания по C++, читаю Р.Лафоре - "Объектро-ориентированное программирование в C++". В книге, на...

методы класса - C++
Доброго времени суток! Заранее извиняюсь за тупку. Чем отличаются вызовы c.printMe(); c.printMe; Первый понятно,...

Inline методы класса - C++
struct A { inline void func(){ do_anything(); }; } a; inline void func(){ do_anything(); }; int main() { ...

Указатель на методы класса - C++
Имеется код: #include <iostream> using namespace std; class s { private: int a; public: void getData() { cout << a;...

Методы и конструкторы класса - C++
Добрый день) Предположим, имеется некоторый класс "Tfunction" представляющий математическую функцию. Интерфейс этого класса хотелось...

протестировать методы класса - C++
У меня есть класс "вектор". В нём добавила метод, который вычисляет длину вектора и перегрузила функции +,-,=. Нужно протестировать все...

12
snake32
1466 / 1032 / 142
Регистрация: 26.02.2009
Сообщений: 3,884
Записей в блоге: 5
30.10.2009, 00:19 #2
Может ещё проще сделать перегрузку оператора *
тогда сможешь написать и так
C++
1
с = a*b
0
JamesBlack
37 / 37 / 3
Регистрация: 28.07.2009
Сообщений: 144
30.10.2009, 00:31  [ТС] #3
Понимаешь, это лабораторка по ООП и в данной (4й) нужно сделать ф-ии, позволяющие оперировать с матрицей, и только в следующей (5й) нужно перегружать операторы. Сдавать одну раньше другой нельзя. Уже спрашивал :-(
0
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
30.10.2009, 00:34 #4
Как вариант: создай еще класс специально для выполнения операций над матрицами ( к примеру MatrixOperations) и добавь туда static функцию Multiply для выполнения твоих операций.
C++
1
MatrixOperations::Multiply(a, b);
0
JamesBlack
37 / 37 / 3
Регистрация: 28.07.2009
Сообщений: 144
30.10.2009, 00:41  [ТС] #5
хммм... а смысл создавать класс, для которого я не делаю объектов? Наверно, тогда уж проще добавить просто функций вне всяких классов в .h где у меня класс matrix описан.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
30.10.2009, 00:46 #6
создай namespace.
0
JamesBlack
37 / 37 / 3
Регистрация: 28.07.2009
Сообщений: 144
30.10.2009, 00:56  [ТС] #7
Посмотрел, что такое namespace, понял, зачем он нужен. Но как и зачем его здесь использовать?
0
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
30.10.2009, 01:07 #8
Цитата Сообщение от JamesBlack Посмотреть сообщение
а смысл создавать класс, для которого я не делаю объектов?
Да, это я погорячился, лишний класс не нужен . Добавь тогда статик метод в свой класс matrix. Это по-моему самый изящный вариант.
1
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
30.10.2009, 01:30 #9
Тебе, насколько я понял, надо вынести Multiply за пределы класса. У тебя есть класс и отдельная функция для работы с данным классом. Так почему бы не сгруппировать это всё определив класс и функцию в своё пространстве имён(можно назвать к примеру Matrix)?
C++
1
2
3
4
Matrix::matrix *a, *b, *c;
a = new Matrix::matrix(...);
b = new Matrix::matrix(...);
c = Matrix::Multiply(a, b);
1
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
30.10.2009, 01:41 #10
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
#include <iostream>
using namespace std;
class Myclass
{
    int i;
public:
    Myclass()
    {
        i=0;
    }
    Myclass(int k)
    {
        i=k;
    }
    static Myclass Plus(Myclass& a, Myclass& b)
    {
        Myclass temp;
        temp.i=a.i+b.i;
        return temp;
    }
    void Print()
    {
        cout << i;
    }
    Myclass& operator = (Myclass obj)
    {
        i=obj.i;
        return *this;
    }
};
int main()
{
    Myclass a(1);
    Myclass b(2);
 
    Myclass c;
    c = Myclass::Plus(a,b);
    c.Print();
    return 0;
}
1
JamesBlack
37 / 37 / 3
Регистрация: 28.07.2009
Сообщений: 144
30.10.2009, 02:31  [ТС] #11
Вот! За static спасибо, именно это я и искал!
P.S. за остальную информацию тоже благодарю, хоть здесь и не нужна, потом пригодится.
0
Lupus
22 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 326
26.11.2011, 16:15 #12
Подниму темку
А можно как-то вызвать метод, определенный внутри класса, не записывая имя класса перед ним
C++
1
2
3
4
Myclass c;
        c = Myclass::Plus(a,b);
        c.Print();
        return 0;
то есть просто вызвать Plus(a,b).
Или для этого всё-таки придется вытащить опеределение метода из класса?
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
26.11.2011, 16:44 #13
Цитата Сообщение от Lupus Посмотреть сообщение
А можно как-то вызвать метод, определенный внутри класса, не записывая имя класса перед ним
Нельзя.
Цитата Сообщение от Lupus Посмотреть сообщение
Или для этого всё-таки придется вытащить опеределение метода из класса?
Да, и если нужен доступ к закрытым данным класса, сделать её дружественной(friend) по отношение к MyClass.
P.S. Более правильное решение: избавиться от метода Plus, и перегрузить оператор сложения(operator+).
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2011, 16:44
Привет! Вот еще темы с ответами:

Виртуальные методы класса - C++
Скажите, зачем нужны виртуальные методы? Почему нельзя использовать стандартные? Спасибо.

Массив указателей на методы класса - C++
Подскажите плз в чём ошибка: class Entrant{ int ID; int mark; int school; int addpt; ...

Полиморфизм и шаблонные методы класса - C++
Есть некий АБК: template &lt;class Ch&gt; class EventIO // interface for derived classes { public: typedef std::basic_string&lt;Ch&gt;...

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


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

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

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