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

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

Войти
Регистрация
Восстановить пароль
 
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
#1

метод класса - C++

30.09.2009, 22:29. Просмотров 471. Ответов 6
Метки нет (Все метки)

Такой вопрос. Необходимо сделать метод класса который бы оперировал с двумя объектами одновременно. В одной книге был пример сравнения двух переменных из разных объектов. Но что-то я не много не понял его. Если необходимо могу написать. Подскажите кто-нибудь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2009, 22:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос метод класса (C++):

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this? - C++
Раздел 1. Строки: нужен фрагмент кода. Обязательно используйте функции для работы со строками. Как найти адрес последнего символа строки?...

Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса - C++
В курсаче по ООП сказано создать для класса виртуальный метод,возвращающий уникальный идентификатор класса. Вопрос в том, что это такое?

Может ли метод родительского класса обратиться к полю дочернего класса - C++
Может ли метод родительского класса обратиться к полю дочернего класса?

Как в методе класса вызвать другой метод того же класса? - C++
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A, int B, int C)

Может ли метод класса возвращать экземпляр этого же класса? - C++
такой вопрос, реально что бы функция класса имела тип класса(возвращала класс), то есть типа так: class c1{ c1 f1(); } если да, то...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Search..
Заказ софта
340 / 185 / 10
Регистрация: 26.05.2009
Сообщений: 863
30.09.2009, 22:48 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class test
{
public:
    test(int sz): itsSize(sz) {}
    ~test() {}
    void method(test* two)
    {
        itsSize > two->itsSize ? (std::cout << "Yes\n") : (std::cout << "Not\n");
    }
private:
    int itsSize;
};
 
int main()
{
    test one(1), two(2);
    one.method(&two);
 
    return 0;
}
Добавлено через 12 минут
Аа, объяснить...

Первый экземпляр класса - это вызывающий объект. То есть: one. В классе он будет как this (указатель на объект). То есть, вместо itsSize (в методе method) можно написать this->itsSize.

Второй экземпляр класса - это тот, который мы передаем method'у
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
01.10.2009, 10:35  [ТС] #3
Цитата Сообщение от Search.. Посмотреть сообщение
Аа, объяснить...

Первый экземпляр класса - это вызывающий объект. То есть: one. В классе он будет как this (указатель на объект). То есть, вместо itsSize (в методе method) можно написать this->itsSize.

Второй экземпляр класса - это тот, который мы передаем method'у
Вроде все понятно. Пробую, не получается. Ввожу значения, а выводит какие-то запредельные цифры.
Я что-то не правильно делаю только не могу понять что. вот код:

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
116
117
class Rational
{
    public:
           void mul(Rational* second);
           Rational();
           ~Rational() {};
    private:
            int num, den;  
            int reduction (int & a,int & b);
}
 
Rational::Rational()
{
    int num = 0;
    string str;
    cout << "Введите числитель: ";
    getline(cin, str);
    istringstream iss_1(str);
 
    if(!(iss_1 >> num))
    {
        iss_1.clear();
        cout << "Вы не ввели значение числителя. \nЕму будет присвоено значение по умолчанию.";
        num = 1;
    }
//------------------------------------------------------------------------------------------//   
    int den = 0;
    cout << "Введите знаменатель: ";
    getline(cin, str);
    istringstream iss_2(str);
    
    if(!(iss_2 >> den))
    {
        iss_2.clear();
        cout << "Вы не ввели значение знаменателя.\nЕму будет присвоено значение по умолчанию.";
        den = 1;
    }
//------------------------------------------------------------------------------------------//    
    reduction(num, den);
    cout <<num<<"/"<<den;
}
 
 
int Rational::reduction (int & a,int & b)
    {
    int i = 0;
        while(i<3)
    {
          if (a % 5 == 0 && b % 5 == 0)      
          {
                  a /= 5;
                  b /= 5;
          }
          if (a % 2 == 0 && b % 2 == 0)
          {
                  a /= 2;
                  b /= 2;
          }
          if (a % 3 == 0 && b % 3 == 0)      
          {
                  a /= 3;
                  b /= 3;
          }
          if (a / b == 1)
          {
                a = 1;
                b = 1;
          }
          i++;
    }
           
          return 0;
    }
int Rational::reduction (int & a,int & b)
    {
    int i = 0;
        while(i<3)
    {
          if (a % 5 == 0 && b % 5 == 0)      
          {
                  a /= 5;
                  b /= 5;
          }
          if (a % 2 == 0 && b % 2 == 0)
          {
                  a /= 2;
                  b /= 2;
          }
          if (a % 3 == 0 && b % 3 == 0)      
          {
                  a /= 3;
                  b /= 3;
          }
          if (a / b == 1)
          {
                a = 1;
                b = 1;
          }
          i++;
    }
           
          return 0;
    }
void Rational::mul (Rational* second)
 {
      int sn = second->num;
      cout <<endl<< sn<<endl; //ошибка тут, выводит постоянно одну и туже цифру - 1985666222
      ...
 }
int main()
{
    Rational one, two;
    
    one.mul(&two);
    cin.get();
    return 0;
}
Nick Alte
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.10.2009, 19:38 #4
Дааа... впечатляить. Значит, так:
во-первых, объявление в конструкторе int num, int den создаёт эти переменные на стеке и СКРЫВАЕТ одноимённые переменные класса (доступ к ним, впрочем, всё ещё возможен через this). Соответствующие переменные класса так и остаются нетронутыми - в них лежит невесть что.
Стиль тоже небезупречен:
- ввод данных бессмысленно усложнён и наворочен. Ну к чему эти строковые потоки? Просто вводи сразу из cin и проверяй статус fail().
- функция mul должна получать не указатель, а ссылку
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
01.10.2009, 20:07  [ТС] #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Дааа... впечатляить. Значит, так:
во-первых, объявление в конструкторе int num, int den создаёт эти переменные на стеке и СКРЫВАЕТ одноимённые переменные класса (доступ к ним, впрочем, всё ещё возможен через this). Соответствующие переменные класса так и остаются нетронутыми - в них лежит невесть что.
Стиль тоже небезупречен:
- ввод данных бессмысленно усложнён и наворочен. Ну к чему эти строковые потоки? Просто вводи сразу из cin и проверяй статус fail().
- функция mul должна получать не указатель, а ссылку
я просто с классами это первое что я делаю. а на счет "создаёт эти переменные на стеке и СКРЫВАЕТ одноимённые переменные класса" я что-то не много не понял, что мне надо исправить?

Добавлено через 10 минут
и кстати еще насчет фэйла. я написал:
C++
1
2
3
4
5
6
  cin >> den;
    if(cin.fail())
    {
        cout << "..мне лень писать..";
        den = 1;
    }
и пока ты чтото не введешь он от тебя не отстанет.. а мне надо чтобы было присвоено по умолчанию если ничего не ввел.
Nick Alte
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.10.2009, 20:46 #6
Объясняю на пальцах.
C++
1
2
3
4
5
6
7
8
9
10
class X {
public: X(int val);
private: int A;
};
X::X(int val)
{
    int A = 7;  // Это новая переменная A, которая не входит в состав класса и пропадёт при выходе из конструктора
    this->A = 8;   //  А вот это - переменная класса
} // В этом месте переменная A, равная 7, уже не существует.
X x;    // x.A == 8
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
02.10.2009, 22:39  [ТС] #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Объясняю на пальцах.
C++
1
2
3
4
5
6
7
8
9
10
class X {
public: X(int val);
private: int A;
};
X::X(int val)
{
    int A = 7;  // Это новая переменная A, которая не входит в состав класса и пропадёт при выходе из конструктора
    this->A = 8;   //  А вот это - переменная класса
} // В этом месте переменная A, равная 7, уже не существует.
X x;    // x.A == 8
спасибо, уже разобрался теперь все работает.

Не по теме:

теперь моя программа может перемножать дроби. осталось научить складывать вычитать и делить)).

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2009, 22:39
Привет! Вот еще темы с ответами:

Как в классе А у объекта класса B вызвать метод класса B ? - C++
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли в...

Чем отличается шаблонный метод класса от шаблонного класса? - C++
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок на летературу

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? - C++
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! - C++
Друзья! Почему так? #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{ ...


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

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

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