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

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

Войти
Регистрация
Восстановить пароль
 
Trurlol
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 21
#1

"вложенные классы" - C++

04.08.2013, 23:03. Просмотров 609. Ответов 6
Метки нет (Все метки)

Не знаю как правильно это называет, так что извиняйте. К примеру есть такая конструкция
C++
1
float Time = Clock.GetElapsedTime().asSeconds();
Где Clock - объект. Вместо .asSeconds() можно поставить .asMilliseconds(). Как такая конструкция называется и как она делается? Допустим я хочу сделать себе библиотеку физических констант, т.е. должно быть что-то вроде такого
C++
1
double G = c.Astro().G();
c - объект, Astro() - "директория" в которой лежат астрономические константы и G непосредственно сама константа. Пробовал через вложенные классы - ничего не вышло или допустил ошибку или делается совершенно по другому, не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 23:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "вложенные классы" (C++):

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс "вентилятор" содержащий в себе классы:...

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой - C++
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: 1)классы,которые могут содержать...

Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат" - C++
Реализовать класс Графический объект от которого будут наследоваться классы "круг" и "квадрат". Собственно, сам код, который был написан...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор" - C++
Дали задачу по программированию: составить класс "Источник напряжения", для которого нужно реализовать два производных класса: "Цепь" и...

6
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
04.08.2013, 23:45 #2
Ну вообще нзывается это цепочками вызовов. Для этого необходимо, что бы метод возвращал объект класса (или ссылку на него), из которого мы вызываем следующий метод.
C++
1
2
3
4
//Допустим у нас есть класс Converter. В нём есть функция Astro(), вот её прототип:
Converter& Converter::Astro();
//И метод G():
Converter& Converter::G();
Соответственно когда происходит вызов Astro(), мы можем вызвать метод от объекта, который этим методом.
C++
1
2
Converter a(5);
auto num = a.Astro().G();
Ну примерно так, класс вы уже сами реализовываете
0
Trurlol
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 21
05.08.2013, 00:57  [ТС] #3
Что-то не очень понятно. В гугле ничего не могу найти по запросу "цепочки вызовов".
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.08.2013, 04:06 #4
Цитата Сообщение от Trurlol Посмотреть сообщение
Как такая конструкция называется и как она делается?
На это ответ уже дан. Вопрос в том, подходит ли это для ваших целей?
Цитата Сообщение от Trurlol Посмотреть сообщение
double G = c.Astro().G();
Тут объект с вызывает метод Astro(), который возвращает объект, который, в свою очередь, вызывает метод G(), который возвращает переменную double, присваиваемую переменной G.
0
BezDesu
0 / 0 / 0
Регистрация: 26.07.2013
Сообщений: 47
05.08.2013, 08:11 #5
Цитата Сообщение от Trurlol Посмотреть сообщение
c - объект, Astro() - "директория" в которой лежат астрономические константы и G непосредственно сама константа. Пробовал через вложенные классы - ничего не вышло или допустил ошибку или делается совершенно по другому, не знаю.
Вложенные классы используются редко - для специфичных задач. А то что ты хочешь можно реализовать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class AstroConstants {
public:
    double G() { return 74.8; }
    double F() { return 104.62; }
};
 
class Constants {
public:
    AstroConstants Astro() { AstroConstants astroCon; return astroCon; }
};
 
int main()
{   
    Constants c;
 
    double G = c.Astro().G(); // Обращение к константе такое, как ты и хотел.
    cout << G << endl;
    double F = c.Astro().F();
    cout << F << endl;
 
    return 0;
}
Но реализация тогда не изящна, из-за строки:
C++
1
AstroConstants Astro() { AstroConstants astroCon; return astroCon; }
По этому делаем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class AstroConstants {
public:
    double G() { return 74.8; }
    double F() { return 104.62; }
};
 
class Constants {
public:
    AstroConstants astroCon; // Объект другого класса, содержащий константы.
};
 
int main()
{   
    Constants c;
 
    double G = c.astroCon.G(); // Обращение к константе теперь более адекватное.
    cout << G << endl;
    double F = c.astroCon.F();
    cout << F << endl;
 
    return 0;
}
Я сам не гуру С++, но уверен что вообще идеально твою задачу можно выполнить с помощью наследования классов. Народ ещё подключится и покажет как это сделать, за одно и сам посмотрю.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.08.2013, 08:30 #6
Цитата Сообщение от Trurlol Посмотреть сообщение
Пробовал через вложенные классы - ничего не вышло
Чем не устроили пространства имен?
C++
1
2
3
4
5
6
7
8
9
10
11
12
namespace Constants {
    namespace Astro {
        double const G = 74.8 ;
        double const F = 104.62 ;
    }
    namespace Math {
        double const PI = 3.14 ;
    }
}
 
//...
Constants::Astro::G
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.08.2013, 09:23 #7
Цитата Сообщение от Trurlol Посмотреть сообщение
Допустим я хочу сделать себе библиотеку физических констант, т.е. должно быть что-то вроде такого:
C++
1
double G = c.Astro().G();
Ошибка в подходе: не нужно класс (классы) подгонять под некий метод. Сначала нужно определиться с данными в классе. Если хотите библиотеку, то что она будет из себя представлять? Если в ней будут храниться объекты других классов, то что они из себя представляют? А потом уж методы.
0
05.08.2013, 09:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2013, 09:23
Привет! Вот еще темы с ответами:

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник" - C++
Не могу понять как реализовать данное задание. Создать 1 базовый класс и несколько производных.Все небольшие ф-ии сделать встроенными...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Классы "Фигура", "Прямоугольник", "Круг" - C++
Где косяк? #define _USE_MATH_DEFINES #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; class Figure { public: ...

Описание классов. Классы "Шар" и "Ящик для шаров" - C++
1.Опишите класс &quot;шар&quot;, описывающий габариты и вес. Данные класса: радиус шара,вес. Методы класса: должны обеспечить минимальную...


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

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

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