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

Как называется такой объект? - C++

Восстановить пароль Регистрация
 
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.07.2012, 01:10     Как называется такой объект? #1
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
#include<iostream>
using namespace std;
class geometry
{
        public:
        static double area(double h, double w)
        {
                return h * w;
        }
        static double area(double r)
        {
                return r * r * 3.14;
        }
 
};
int main()
{
        double rectangle_area = geometry().area(3, 4);
        double circle_area = geometry().area(5);
        cout << rectangle_area << endl;
        cout << circle_area << endl;
 
        return 0;
}
А именно в строках 18 и 19. Здесь вызывается конструктор, а потом уже сам метод?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 01:12     Как называется такой объект? #2
Цитата Сообщение от edward_jonson Посмотреть сообщение
double rectangle_area = geometry().area(3, 4);
* * * * double circle_area = geometry().area(5);
переменным с именами rectangle_area и circle_area типа double присваиваются значения возвращаемые методами класса :
в стр 18 методом double area(double h, double w)
в стр 19 методом double area(double r)
(оба метода класса перегружены, т.к. имеют одно и тоже название)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 01:12     Как называется такой объект? #3
Цитата Сообщение от edward_jonson Посмотреть сообщение
Как называется такой объект?
временный
temporary object
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 01:15     Как называется такой объект? #4
Цитата Сообщение от edward_jonson Посмотреть сообщение
class geometry
{
* * * * public:
* * * * static double area(double h, double w)
* * * * {
* * * * * * * * return h * w;
* * * * }
* * * * static double area(double r)
* * * * {
* * * * * * * * return r * r * 3.14;
* * * * }
};
- это класс с именем geometry метод double area(double h, double w) возвращает площадь прямоугольника, метод double area(double r) возвращает площадь окружности радиуса r
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 01:17     Как называется такой объект? #5
тут неправильно код написан, думаю подразумевалось так

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
#include<iostream>
using namespace std;
class geometry
{
        public:
        static double area(double h, double w)
        {
                return h * w;
        }
        static double area(double r)
        {
                return r * r * 3.14;
        }
 
};
int main()
{
        double rectangle_area = geometry::area(3, 4);
        double circle_area = geometry::area(5);
        cout << rectangle_area << endl;
        cout << circle_area << endl;
 
        return 0;
}
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.07.2012, 01:19  [ТС]     Как называется такой объект? #6
-=ЮрА=-, спасибо, но с классами я немного знаком, и понимаю, что эти методы возвращают .
А насколько широко используются временные объекты в C++?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 01:23     Как называется такой объект? #7
Цитата Сообщение от edward_jonson Посмотреть сообщение
А насколько широко используются временные объекты в C++?
Не очень часто, но есть куда они очень удачно вписываются

как правило либо для конструирования параметра функции (как http://www.cplusplus.com/reference/std/functional/plus/), либо для RAII
-=ЮрА=-
13.07.2012, 01:23
  #8

Не по теме:

alex_x_x, как в первом посте катит http://codepad.org/PG9kDlHO

edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.07.2012, 01:24  [ТС]     Как называется такой объект? #9
alex_x_x, Неправильно, или вызов этих методов варьируется? Лично у меня работают оба варианта. В вашем случае временный объект также создаётся, или методы вызываются сами по себе?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 01:24     Как называется такой объект? #10
-=ЮрА=-, так я не спорю, просто смысл создавать объект для вызова статического метода?
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 01:28     Как называется такой объект? #11
Цитата Сообщение от alex_x_x Посмотреть сообщение
просто смысл создавать объект для вызова статического метода?
ну тогда думаю лучше сказать, что в случае кода в первом посте мы создаём два временных экземпляра класса т.к. присутсвует geometry(), во втором (твоём) случае напрямую используем методы класса через раскрытие области видимости (читай функции как в нэймспэйсе geometry записали).
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 01:35     Как называется такой объект? #12
-=ЮрА=-, дада, именно в этом смысле
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
13.07.2012, 01:36     Как называется такой объект? #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
Не очень часто, но есть куда они очень удачно вписываются
А разве автоматически они не создаются? При работе конструктора копирования, к примеру.
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 01:59     Как называется такой объект? #14
IGPIGP, при таком построении класса
C++
1
2
3
4
5
class SomeClass
{
   public:
   double SomeFunc(...);
};
При раскрытии области видимости SomeClass::SomeFunc(...) ничего автоматом не создаётся, это аналогично если бы записали,
C++
1
2
3
4
namespace SomeClass
{
   double SomeFunc(...);
};
и сделали такой же вызов SomeClass::SomeFunc(...)
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:00     Как называется такой объект? #15
Добавлено через 17 минут
Чтобы не было сомнений в постах 11 и 14
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
#include<iostream>
using namespace std;
 
int param = -3;
class geometry
{
public:
    geometry(){param = 1;}
    static int retParam()
    {
        return param;
    }
    static double area(double h, double w)
    {
        return h * w;
    }
    static double area(double r)
    {
        return r * r * 3.14;
    }
};
 
int main()
{
    double rectangle_area = geometry::area(3, 4);
    double circle_area    = geometry::area(5);
    cout << rectangle_area << endl;
    cout << circle_area << endl;
    cout<<geometry::retParam()<<endl;
    cout<<geometry().retParam()<<endl;
    return 0;
}
http://codepad.org/hRph2ZNM
12
78.5
-3
1
Миниатюры
Как называется такой объект?  
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
13.07.2012, 02:13     Как называется такой объект? #16
-=ЮрА=-, я не про вызов статического метода через класс (без создания экземпляра). Я имел ввиду, что создание временных объектов встроено в язык и делается без нашего участия довольно часто. При передаче по значению, при возврате, при инициализации:
A b = 3;
То есть, если и самому нужно, то не грех ведь, создать временный, безымянный (анонимный) объект?
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:33     Как называется такой объект? #17
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я имел ввиду, что создание временных объектов встроено в язык и делается без нашего участия довольно часто.
- согласен
IGPIGP, я расценил твой пост в контексте данной темы, так что возможно мы говорили о разных вещахНа счёт этого
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, если и самому нужно, то не грех ведь, создать временный, безымянный (анонимный) объект
иногда создание класса может потребовать кучи дополнительных условий и вызовов методов аля AfxWinInit и т.д. (т.е чтобы только создать временный объект нужно выполнить небольшой шаманский ритуал, без которого вызов метода через временный объект вызовет крах алгоритма), в то время как метод в принципе может быть доступен через раскрытие области видимости. В общем для простых классов как у edward_jonson, можно не заморачиваться и использзовать оба метода, в то время как для классов скажем так с "наворотами" предпочтительней раскрывать видимость(конечно если "сам клас позволяет" так глубоко в него влазить без цветов, коробка конфет и шампанского)

Добавлено через 9 минут
Попробую пояснить примером:

Скажем есть класс CSelectFile с использованием внутри него CFileDialog и в нём есть скажем public метод splitpath (разбивает имя выбранного файла на Том:\\цепь каталогов\\имя файла.рсширение. Так вот без AfxWinInit CSelectFile().splitpath опрокинет нашу программу, а вот CSelectFile::splitpath разредит путь к файл на нужные нам куски. Пример может не совсем удачен, но что либо кодить будет долго, а по быстрому думаю для понимание сгодится
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
13.07.2012, 02:33     Как называется такой объект? #18
Цитата Сообщение от IGPIGP Посмотреть сообщение
A b = 3;
равноценно A b(3);
здесь нет временных объектов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 03:22     Как называется такой объект?
Еще ссылки по теме:

C++ Как называется компонентная функция?
C++ Как называется функция
Как называется условие if (!x) {} и как оно работает? C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
13.07.2012, 03:22     Как называется такой объект? #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
конечно если "сам клас позволяет"
Если позволяет то конечно. Тем более если метод статический. Это легче, а иногда наверное и нельзя по другому... Особенно, если объект без инициализации не создастся и при попытке доступа - ошибка выполнения.
Я про то, что если нестатический метод, а класс, даже без _gc, то всё равно ведь, временные объекты должны удаляться быстрее?
Цитата Сообщение от alex_x_x Посмотреть сообщение
равноценно A b(3);
Конечно, но вместо 3-ки может быть выражение (трёх-этажное, но в смысле приличное) типа int .
Yandex
Объявления
13.07.2012, 03:22     Как называется такой объект?
Ответ Создать тему
Опции темы

Текущее время: 07:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru