Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 18:31   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Классы, для чего описывается указатель?

Ребят, всем привет! Есть три файла, первый-*.h файл, вот его код

Код:

#ifndef DROB_H
#define DROB_H
class drob
{
public:
    int num;
    int denum;
    drob();

    void setnum(int a);
    void setdenum(int a);
    void add(drob *y);
    void sub(drob *y);
    void mul(drob *y);
    void div(drob *y);

};
#endif // DROB_H
Второй-*.cpp файл, собственно реализация

Код:
#include "drob.h"

drob::drob()
{

}

void drob::setnum(int a)
{
    num=a;
}

void drob::setdenum(int a)
{
    denum=a;
}

void drob::add(drob *y)
{
    this->num=this->num*y->denum+this->denum*y->num;
    this->denum=this->denum*y->denum;
}

void drob::sub(drob *y)
{
    this ->num=this->num*y->denum-this->denum*y->num;
this->denum=this->denum*y->denum;
}

void drob::mul(drob *y)
{
    this ->num=this->num*y->num;
    this->denum=this->denum*y->denum;
}

void drob::div(drob *y)
{

    this ->num=this->num*y->denum;
    this -> denum=this->denum*y->num;

}
Третий-файл mainwindow.cpp, обрабатывается событие щелчка по кнопке
Код:
void MainWindow::on_pushButton_clicked()
{
drob *first,*second;
first=new drob();
second=new drob();

first->setnum(ui->ch_1->text().toInt());
first->setdenum(ui->zn_1->text().toInt());

second->setnum(ui->ch_2->text().toInt());
second->setdenum(ui->zh_2->text().toInt());

if (ui->radioAdd->isChecked()) first->add(second);
if (ui->radioSub->isChecked()) first->sub(second);
if (ui->radioMul->isChecked()) first->mul(second);
if (ui->radioDiv->isChecked()) first->div(second);


ui->ch_3->setText(QString("%1").arg(first->num));
ui->zh_3->setText(QString("%1").arg(first->denum));


delete first;
delete second;


}

Вопрос про
Код:
void drob::div(drob *y)
в скобках используется указатель на класс?

Код:
drob *first,*second;
first=new drob();
second=new drob();
Это я как понял создаются объекты типа "класс"? :D или как иначе называется?
кто-нибудь может объяснить для чего нужен указатель на *y?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.03.2015, 19:26   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
указатель на класс?
Указатель на объект.
Цитата:
кто-нибудь может объяснить для чего нужен указатель на *y?
Не вникал в код, но указатели на объекты классов ничем не отличаются от других указателей. Просто открой начало учебника, где эта тема описывается.

В данном случае, наверное, чтобы избежать копирования объекта. Хотя в этом конкретном случае можно (и лучше) использовать константную ссылку чем указатель.
rrrFer вне форума Ответить с цитированием
Старый 22.03.2015, 06:36   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

это код из лекций, приведите примеры с заданием объекта как константы
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 22.03.2015, 15:55   #4
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Код:
drob *first,*second;
first=new drob();
second=new drob();
Это я как понял создаются объекты типа "класс"? :D или как иначе называется?
кто-нибудь может объяснить для чего нужен указатель на *y?
Создаются 2 указателя, которые в последствии указывают на область памяти, где будут храниться экземпляры типа drop.
Код:
drob *first,*second;
Что делаем здесь? new drop() динамически выделяет память для экземпляра drop(т.е. где-то в памяти создается объект), и возвращает указатель на эту память. Теперь нужные адреса хранятся в first и second.
Код:
first=new drob();
second=new drob();
Указатель на y, видимо нужен для того чтобы выполнять какие-то операции над указываемыми объектами. Например:
Код:
first->add(second);
Цитата:
Это я как понял создаются объекты типа "класс"?
Типа drop.
Класс это констукция, которая описывает пользовательский тип. Тип, который хранит какие-то данные, а методы класса, описывают операции, применимые к этим данным.
halcyon вне форума Ответить с цитированием
Старый 24.03.2015, 22:24   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
first->setnum(ui->ch_1->text().toInt());
first->setdenum(ui->zn_1->text().toInt());
А разве содержимое переменной first не будет затираться после выполнения второй строчки?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.03.2015, 22:32   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

first это указатель, в нем адрес в памяти хранится (1 число).
И чем первая строка хуже второй?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.03.2015, 22:41   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну в делфи если так

Код:
var
first:integer;
begin
first:=105;
first:=106
showmessage(inttostr(first));
end;
Будет ответ 106, разве данные неперезатираются в указателях?

например так:

Код:
int main()
{int *i;
*i=100;
*i=105;
}
ответ же будет105
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.03.2015, 22:54   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И где вы тут видите
Код:
first = 106;
?

Тут first (указатель, а не сам объект) тоже не изменится.
Код:
var
    first: TMyObject;
begin
    first := TMyObject.Create;
    first.MyMethod();
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.03.2015, 01:12   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

то есть в указатель на объект first вписываются 2 метода описаных в классе? Есть более наглядный пример?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 25.03.2015, 17:07   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Чего вы впишете в указатель? Это просто число (4 байт, или 8 на x64) — адрес в памяти. И вот по этому адресу уже находится сам объект.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы. Указатель на объект в классе. Son Помощь студентам 2 21.05.2013 18:45
Передать указатель на указатель в функцию erro Общие вопросы C/C++ 3 29.10.2012 17:59
Указатель на массивы.Классы памяти Яна696 Общие вопросы C/C++ 29 28.05.2012 14:55
где описывается тип Richard22 Общие вопросы Delphi 2 21.10.2010 22:18
Указатель для однокоренных слов krendel34rus Microsoft Office Word 8 30.11.2009 02:08