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

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

Войти
Регистрация
Восстановить пароль
 
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
#1

Указатели на объект - C++

18.03.2014, 13:13. Просмотров 394. Ответов 14
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста вот по какому вопросу...
Начали изучать классы в С++, и сначала была задача ввода дроби, ее сокращению и выводу в общепринятом виде, теперь задача в том чтобы ввести несколько дробей и написать в классе функции которые будут делить и перемножать дроби. Теперь собственно сам мой вопрос: как правильно использовать указатели в этом случае? Чтобы просто прописать функцию.. В этой задаче много "воды", она у меня переделана, но если вы мне объясните принцип (прошу вас не писать мне весь листинг, хочу сам научиться работать) по которому это работает...допустим как сложить два числителя, ну или просто как сослаться к числителю первой дроби и второй, в чем отличие и сходство обращения? В листинге кстати ввод одной дроби
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
 
class Drob
{ private: int a,b,d,e,i,k;
  public: void Set_Drob ()
          { cout<<"Vvedite chislitel` "; cin>>a; cout<<"Vvedite znamenatel` "; cin>>b;
            cout<<"Drob` "<<endl<<a<<endl<<"-"<<endl<<b<<endl;
          }
          void sokrat ()
  { for(i=2,k=0;i<=a;i++) if (b%i==0&&a%i==0){d=a/i; e=b/i;k++; cout<<endl;}}
   int kak()
   {if(k>0) cout<<"Drob` sokratima"<<endl<<d<<endl<<"-"<<endl<<e<<endl;
    else cout<<"Drob` ne sokratima"<<endl;}
};
int main()
{
    Drob First;
    First.Set_Drob();
    First.sokrat();
    First.kak();
    system("Pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 13:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели на объект (C++):

Указатели на объект - C++
Господа код компилируется и запускается , но после запуска выскакивает окно - прекращена работа программы , почему ? Что я делаю не так и...

Конструкторы и указатели на объект класса - C++
Добрый вечер. Помогите, пожалуйста, прояснить 2 вещи: 1) В чём будет отличие между конструкторами: int a; //Исп. оператор...

Потоки и указатели (в поток вставить объект класса) - C++
Есть структура: class shapka{ public: int* prev; int n; int* next; } }; Нужно в поток вставить объект класса, потом...

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

14
John Prick
802 / 735 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
18.03.2014, 13:37 #2
Во-первых, назовите в классе поля числителя и знаменателя нормальными названиями
дробь - fraction
числитель - numerator
знаменатель - denominator
Тогда хоть станет ясно, где у вас что.

Во-вторых, я так понимаю, подразумевается переопределить операторы умножения и деления для дроби.
C++
1
2
Fraction operator*(const Fraction & F1, const Fraction & F2);
Fraction operator/(const Fraction & F1, const Fraction & F2);
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
18.03.2014, 13:52  [ТС] #3
John Prick, когда пишешь программу на таком уровне владения информацией, когда часто используешь переменные , то мне гораздо удобнее использовать переменные а и b, это не принципиально, если людям удобней будет помогать мне так, переименую))
Суть задания в том чтобы прописать универсальную функцию в описании класса, для сколь угодно дробей, и чтобы в теле можно было вызвать ее сколь угодно раз, и она перемножит и поделит столько раз сколько нжно пользователю... я вот этого не понимаю, преподаватель единственное что сказал то это то что вызов нужно сделать через точку...весьма информативно)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream.h>
 
class Fraction
{ private: int numerator, denominator;
  public: void Set_Fraction()
          { cout<<"Vvedite chislitel` "; cin>>numerator; cout<<"Vvedite znamenatel` "; cin>>denominator;
            cout<<"Drob` "<<endl<<numerator<<endl<<"-"<<endl<<denominator<<endl;
          }
          int d,e,i,k;
          void sokrat ()
  { for(i=2,k=0;i<=numerator;i++) if (denominator%i==0&&numerator%i==0){d=numerator/i; e=denominator/i;k++; cout<<endl;}}
   int kak()
   {if(k>0) cout<<"Drob` sokratima"<<endl<<d<<endl<<"-"<<endl<<e<<endl;
    else cout<<"Drob` ne sokratima"<<endl;}
};
int main()
{
    Fraction First;
    First.Set_Fraction();
    First.sokrat();
    First.kak();
    system("Pause");
    return 0;
}
0
John Prick
802 / 735 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
18.03.2014, 13:59 #4
Ну в таком случае можно написать что-то типа:
C++
1
2
3
4
5
6
7
8
9
10
class Fraction
{
public:
    Fraction Multiply(const Fraction & F)
    {
        Fraction result;
        // тут перемножаем по правилам
        return result;
    }
};
Тогда в коде можно будет вызывать, например так:
C++
1
2
3
Fraction f1, f2, f3, f4;
f4 = f1.Multiply(f2);
Fraction f5 = f1.Multiply(f2.Multiply(f3.Multyply(f4)));
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
24.03.2014, 14:24  [ТС] #5
Здравствуйте, тема для меня еще не закрыта, не могу разобраться в этом... подскажите пожалуйста как реализовать? дроби вводится у меня уже 2.. двумя различными конструкторами, по умолчанию и с параметром.. сейчас программа проверяет сокращаются ли 2 дроби и выводит их. нужно написать функцию умножения и деления дробей... еще узнал что эта функция должна быть прописана в наследуемом разделе...
в моей программе а - числитель, b - знаменатель, с и d так же числитель и знаменатель но для сокращаемой дроби... как вспомогательные переменные...класс - Drob
C++ (Qt)
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
#include <iostream.h>
 
class Drob
{ protected: int a,b;
  public: Drob(){cout<<"Vvedite drob` "<<endl;cin>>a>>b;}
          Drob(int x, int y){a=x; b=y;} 
          
   void Print()
   {cout<<"Drob` "<<endl<<a<<endl<<"-"<<endl<<b<<endl;}
               void sokrat ()
 { int i,d,e,k; for(i=2,k=0;i<=a;i++) if (b%i==0&&a%i==0) {d=a/i;e=b/i;k++;cout<<endl;}
              
             if(k>0) cout<< "Drob` sokratima"<< endl<<d<<endl<<"-"<<endl<<e<<endl;
 else cout<< "Drob` ne sokratima"<<endl;}
                        
};
 
int main()
{
    
    Drob First,A(3,5);
    A.Print();
    A.sokrat();
    First.Print();
    First.sokrat();
    system("Pause");
    return 0;
}
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.03.2014, 14:47 #6
Цитата Сообщение от Warzone-blg Посмотреть сообщение
нужно написать функцию умножения и деления дробей... еще узнал что эта функция должна быть прописана в наследуемом разделе...
про умножение и деление было раньше написано, а насчет "наследуемого раздела" создать класс наследник и в нем определить эти методы? или что...
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
24.03.2014, 14:49  [ТС] #7
aLarman, Да, создать наследуемый класс, в моем случае если не ошибаюсь это будет выглядеть как
C++ (Qt)
1
2
3
 class Nasledie:public Drob
 {
 public:
и вот в паблик прописать функцию или как вы сказали метод который будет умножать дроби или делить их, то есть чтобы нам осталось только вызвать эту функцию в теле
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.03.2014, 14:51 #8
а как Вы хотите? что бы можно было писать так - drob1/drob2 ? или так drob1.Razdelit(drob2)?
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
24.03.2014, 15:01  [ТС] #9
aLarman, мне кажется у меня не получится, да? ведь числитель и знаменатель у меня по факту не связаны, дробь выводится просто через cout и дефис, но вообще если вызывать функцию то это второй вариант drob1.Razdelit(drob2)

Добавлено через 7 минут
уже все равно как это будет реализовано... сдача на днях...а сам я разобраться не смог
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.03.2014, 15:23 #10
можно перегрузить оператор /
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Nasledie:public Drob
 {
 public:
Nasledie():Drob()
{}
Nasledie(int x, int y): Drob(x,y)
{}
const Nasledie operator/(const Nasledie & r)
{
int g,k;
g = a*r.b;
k = b*r.a;
return Nasledie(g,k);
}
};
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
const Nasledie Razdelit(const Nasledie & r)
{
int g,k;
g = a*r.b;
k = b*r.a;
return Nasledie(g,k);
}
или вот такой метод, в 1ом случае Вызываем
C++
1
2
Nasledie Drob1,Drob2;
Nasledie Drob3 = Drob1/Drob2;
во втором случае
C++
1
Nasledie Drob3 = Drob1.Razdelit(Drob2);
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
25.03.2014, 13:10  [ТС] #11
aLarman, а в каком месте объявить или как вызвать drob1 drob2 они ведь не объявлены..

Добавлено через 3 минуты
В чем тут дело подскажите... как заставить это работать? С того момента как создал наследуемый класс и нужно разделить одну дробь на другую... ну или умножить...не важно...
C++ (Qt)
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
#include <iostream.h>
 
class Drob
{ protected: int a,b;
  public: Drob(){cout<<"Vvedite drob` "<<endl;cin>>a>>b;}
          Drob(int x, int y){a=x; b=y;} 
          
   void Print()
   {cout<<"Drob` "<<endl<<a<<endl<<"-"<<endl<<b<<endl;}
               void sokrat ()
 { int i,d,e,k; for(i=2,k=0;i<=a;i++) if (b%i==0&&a%i==0) {d=a/i;e=b/i;k++;cout<<endl;}
              
             if(k>0) cout<< "Drob` sokratima"<< endl<<d<<endl<<"-"<<endl<<e<<endl;
 else cout<< "Drob` ne sokratima"<<endl;}
                        
};
class Nasledie:public Drob
 {
 public:
Nasledie():Drob()
{}
Nasledie(int x, int y): Drob(x,y)
{}
const Nasledie Razdelit(const Nasledie & r)
{
int g,k;
g = a*r.b;
k = b*r.a;
return Nasledie(g,k);}
};
int main()
{
    
    Drob First,A(3,5);
    A.Print();
    A.sokrat();
    First.Print();
    First.sokrat();
    Nasledie Drob3 = A.Razdelit(First);
    system("Pause");
    return 0;
}
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 13:13 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    
    Nasledie First,A(3,5);
    A.Print();
    A.sokrat();
    First.Print();
    First.sokrat();
    Nasledie Drob3 = A.Razdelit(First);
    Drob3.Print();
    system("Pause");
    return 0;
}
0
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
25.03.2014, 13:26  [ТС] #13
aLarman, Вы словно бог С++ ))) Большое спасибо)
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 13:43 #14
Warzone-blg,
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 13:47 #15
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
Nasledie First,A(3,5);
* * A.Print();
* * A.sokrat();
* * First.Print();
* * First.sokrat();
* * Nasledie Drob3 = A.Razdelit(First);
* * Drob3.Print();
* * system("Pause");
* * return 0;
}
А где здесь указатель?
0
25.03.2014, 13:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 13:47
Привет! Вот еще темы с ответами:

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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