Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
161 / 161 / 68
Регистрация: 23.02.2011
Сообщений: 392
1

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

13.07.2012, 01:10. Просмотров 931. Ответов 18
Метки нет (Все метки)

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. Здесь вызывается конструктор, а потом уже сам метод?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2012, 01:10
Ответы с готовыми решениями:

Как преобразовать ссылку на объект в указатель на этот объект?
Как преобразовать ссылку на объект в указатель на этот объект? Буду благодарен за помощь.

Как называется функция
В общем, решил написать змейку. Всё хорошо,вот только проблемка. Чтобы управлять змейкой,нужно...

Как называется принцип?
Что это за принцип шифрования, может кто рассказать? while ( *s != '\0') // до тех пор пока...

Как это называется?
С. Прата, листинг 8.1 // использование встроенной функции #include &lt;iostream&gt; inline double...

18
Заблокирован
Автор 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)
(оба метода класса перегружены, т.к. имеют одно и тоже название)
1
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.07.2012, 01:12 3
Цитата Сообщение от edward_jonson Посмотреть сообщение
Как называется такой объект?
временный
temporary object
1
Заблокирован
Автор 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
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
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;
}
1
161 / 161 / 68
Регистрация: 23.02.2011
Сообщений: 392
13.07.2012, 01:19  [ТС] 6
-=ЮрА=-, спасибо, но с классами я немного знаком, и понимаю, что эти методы возвращают .
А насколько широко используются временные объекты в C++?
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.07.2012, 01:23 7
Цитата Сообщение от edward_jonson Посмотреть сообщение
А насколько широко используются временные объекты в C++?
Не очень часто, но есть куда они очень удачно вписываются

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

Не по теме:

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

0
161 / 161 / 68
Регистрация: 23.02.2011
Сообщений: 392
13.07.2012, 01:24  [ТС] 9
alex_x_x, Неправильно, или вызов этих методов варьируется? Лично у меня работают оба варианта. В вашем случае временный объект также создаётся, или методы вызываются сами по себе?
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.07.2012, 01:24 10
-=ЮрА=-, так я не спорю, просто смысл создавать объект для вызова статического метода?
1
Заблокирован
Автор FAQ
13.07.2012, 01:28 11
Цитата Сообщение от alex_x_x Посмотреть сообщение
просто смысл создавать объект для вызова статического метода?
ну тогда думаю лучше сказать, что в случае кода в первом посте мы создаём два временных экземпляра класса т.к. присутсвует geometry(), во втором (твоём) случае напрямую используем методы класса через раскрытие области видимости (читай функции как в нэймспэйсе geometry записали).
1
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.07.2012, 01:35 12
-=ЮрА=-, дада, именно в этом смысле
0
Комп_Оратор)
Эксперт по математике/физике
8375 / 4133 / 565
Регистрация: 04.12.2011
Сообщений: 12,252
Записей в блоге: 14
13.07.2012, 01:36 13
Цитата Сообщение от alex_x_x Посмотреть сообщение
Не очень часто, но есть куда они очень удачно вписываются
А разве автоматически они не создаются? При работе конструктора копирования, к примеру.
0
Заблокирован
Автор 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(...)
0
Заблокирован
Автор 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
2
Миниатюры
Как называется такой объект?  
Комп_Оратор)
Эксперт по математике/физике
8375 / 4133 / 565
Регистрация: 04.12.2011
Сообщений: 12,252
Записей в блоге: 14
13.07.2012, 02:13 16
-=ЮрА=-, я не про вызов статического метода через класс (без создания экземпляра). Я имел ввиду, что создание временных объектов встроено в язык и делается без нашего участия довольно часто. При передаче по значению, при возврате, при инициализации:
A b = 3;
То есть, если и самому нужно, то не грех ведь, создать временный, безымянный (анонимный) объект?
0
Заблокирован
Автор FAQ
13.07.2012, 02:33 17
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я имел ввиду, что создание временных объектов встроено в язык и делается без нашего участия довольно часто.
- согласен
IGPIGP, я расценил твой пост в контексте данной темы, так что возможно мы говорили о разных вещахНа счёт этого
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, если и самому нужно, то не грех ведь, создать временный, безымянный (анонимный) объект
иногда создание класса может потребовать кучи дополнительных условий и вызовов методов аля AfxWinInit и т.д. (т.е чтобы только создать временный объект нужно выполнить небольшой шаманский ритуал, без которого вызов метода через временный объект вызовет крах алгоритма), в то время как метод в принципе может быть доступен через раскрытие области видимости. В общем для простых классов как у edward_jonson, можно не заморачиваться и использзовать оба метода, в то время как для классов скажем так с "наворотами" предпочтительней раскрывать видимость(конечно если "сам клас позволяет" так глубоко в него влазить без цветов, коробка конфет и шампанского)

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

Скажем есть класс CSelectFile с использованием внутри него CFileDialog и в нём есть скажем public метод splitpath (разбивает имя выбранного файла на Том:\\цепь каталогов\\имя файла.рсширение. Так вот без AfxWinInit CSelectFile().splitpath опрокинет нашу программу, а вот CSelectFile::splitpath разредит путь к файл на нужные нам куски. Пример может не совсем удачен, но что либо кодить будет долго, а по быстрому думаю для понимание сгодится
1
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
13.07.2012, 02:33 18
Цитата Сообщение от IGPIGP Посмотреть сообщение
A b = 3;
равноценно A b(3);
здесь нет временных объектов
0
Комп_Оратор)
Эксперт по математике/физике
8375 / 4133 / 565
Регистрация: 04.12.2011
Сообщений: 12,252
Записей в блоге: 14
13.07.2012, 03:22 19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
конечно если "сам клас позволяет"
Если позволяет то конечно. Тем более если метод статический. Это легче, а иногда наверное и нельзя по другому... Особенно, если объект без инициализации не создастся и при попытке доступа - ошибка выполнения.
Я про то, что если нестатический метод, а класс, даже без _gc, то всё равно ведь, временные объекты должны удаляться быстрее?
Цитата Сообщение от alex_x_x Посмотреть сообщение
равноценно A b(3);
Конечно, но вместо 3-ки может быть выражение (трёх-этажное, но в смысле приличное) типа int .
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2012, 03:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня...

как называется такой разъем?
хочу найти в нигазине и купить ...

Как называется такой шифр?
Это шифр не является шифром простой замены. Здесь каждой букве соответствует одно или несколько...

Как называется такой код?
domen.ru/%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 Как такой код называется? Я думал, что...


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

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

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