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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

Что-то код выдаёт не так - C++

07.10.2009, 16:24. Просмотров 1581. Ответов 29

Что-то код выдает неправильно, хотя он и компилится:
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
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
class Vechicle{
    int passengers;
    int fuelcap;
    int mpg;
public:
    Vechicle():passengers(),fuelcap(),mpg() { }
    Vechicle(int p, int f, int m) { }   
    
 
    int  range()
    {
        return mpg * fuelcap;
    }
    int get_passengers() {return passengers;}
    int get_fuelcap()    {return fuelcap;}
    int get_mpg()        {return mpg;}
};
 
int main()
{
    Vechicle minivan(7,16,21);
    Vechicle sportscar(2,14,12);
 
    int range1,range2;
    range1 = minivan.range();
    range2 = sportscar.range();
 
    setlocale(0,"");
    cout<<"Манифургон может перевезти "
        <<minivan.get_passengers()
        <<" пассажиров на расстояние "<<range1
        <<" киллометров. "<<'\n';
 
    cout<<"Спортивный автомобиль  может перевезти "
    <<minivan.get_passengers()
    <<" пассажира на расстояние "<<range2
    <<" киллометров"<<'\n';
 
    cin.get();
}
Добавлено через 13 минут
Всё, понял,нужно было вот так:
C++
1
    Vechicle(int p, int f, int m):passengers(p), fuelcap(f), mpg(m) { }

Вы не объясните зачем нужно вот это:

C++
1
2
3
 int get_passengers() {return passengers;}
        int get_fuelcap()    {return fuelcap;}
        int get_mpg()        {return mpg;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2009, 16:24     Что-то код выдаёт не так
Посмотрите здесь:
C++ При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
Ошибки выдаёт ( не пойму причину, что не так? C++
C++ Не работает код, скажите что не так)
C++ Народ гляньте код и подскажите что не так.
C++ Код Виженера. Не полностью выполняется. Что не так?
Преобразовать код так, что бы ввод данных осуществлялся из файла C++
C++ Почему код не работает хотя ошибок нет? Что-то не так с выделением памяти?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.10.2009, 10:50     Что-то код выдаёт не так #16
Цитата Сообщение от Syltan Посмотреть сообщение
Код
позволяющее объединить данные и код в объект и скрыть реализацию объекта
Инкапсуляция - это,когда я создал объект закрытого класса в функции мэин?
То есть например я объявил в привате функцию
C++
1
2
3
4
5
6
7
class sova{
private:
void YRA(int x) 
{
   sqr(x);
}
};
А затем:
C++
1
2
3
4
5
6
int main()
{ 
   sova T;
T.YRA(7);
 
}
Это называется инкапсуляция?
это не называется инкапсуляцией. это называется нарушением доступа. ф-я объявлена в классе приватной, поэтому доступна только объектам данного класса, а вы ее попытались вызвать ее "снаружи".

вы приходите в ресторан. там есть кухня, но вас туда не пустят, если вы не сотрудник ресторана: туда - приватный доступ. только "членам класса". вы можете взять меню и заказать официанту что-нибудь. а приготовление, как и заказ продуктов, уборка, оплата электричества, газа и пр. "инкапсулированы втутри ресторана", т.е. вы можете догадываться как это функционирует, но не можете в этом поучаствовать. ваш интерфейс: меню и официант. если несъедобное принесли - пожаловаться можете шефу можете (тоже ф-я вашего интерфейса), но пойти и поучать повара вас не пустят. и вообще может там нет никакого электричества. и никакой кухни может тоже нет (а вчера была!). с сегодняшняго дня по четным (а сегодя 4-е) все заказы перенаправляются в соседний ресторан и там готовятся и доставляются по пневмопочте (они оптимизировали реализацию). но вас это не касается: вы заказали, вам принесли, и вы не заметили разницы. потому что реализация инкапсулирована внутри класса "ресторан".
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 14:36  [ТС]     Что-то код выдаёт не так #17
Код - это функции-члены класса, в которых описан код.
Данные - это переменные, описанные в самом классе, а не в функциях.
Инкапсуляция - это использование экземпляра класса, то есть объекта, который мы получили из-за объеденения даных и код в класс, и скрываем реализацию объекта от пользователя?
А так правильно?
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 15:25     Что-то код выдаёт не так #18
Syltan, инкапсуляция - это не использование объекта!! Инкапсуляция - это сокрытие всего ненужного тебе хлама которое поддерживает нормальную работу твоего объекта и которое не позволяет тебе нарушить её!
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 15:29  [ТС]     Что-то код выдаёт не так #19
1)
Код
Код - это функции-члены класса, в которых описан код.
Данные - это переменные, описанные в самом классе, а не в функциях.
Это определение верно?

2) Инкапсуляция - скрытие всех, полей, которые использовались для создания этого объекта?
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 15:42     Что-то код выдаёт не так #20
Syltan, забудь про объект. Нету у тебя его! Просто нету. Не создал его ты еще. И все ООП рухнуло. Если нет объекта, то нет инкапсуляции, падает один из основных принципов и все пора вешаться. НЕТ! Объект такого класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{
 public:
   A();
};
A::A()
{
   std::cout<<"Я создан";
}
int main()
{
   A* a = new A();
   return 0;
}
Вот и все что надо для создания объекта. Вот смотри - ты живешь, думаешь, дышишь. Окружающая среда может получить непосредственный доступ к твоим легким, мозгу? Нет! Потому что они скрыты от окружающей среды. Но она может получить к ним с помощью определенных открытых методов(носа, глаз, etc.) И тебе важно как у тебя устроен организм? Нет, поэтому все скрыто от тебя под кожей.
Что такое код и данные относительно ООП? Таких понятий в самом ООП нет.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.10.2009, 16:47     Что-то код выдаёт не так #21
Цитата Сообщение от Syltan Посмотреть сообщение
1)
Код
Код - это функции-члены класса, в которых описан код.
Данные - это переменные, описанные в самом классе, а не в функциях.
Это определение верно?
значение слова "код" зависит от контекста. данные не обязательно описаны в классе. они могут быть где-то вообще снаружи.

Цитата Сообщение от Syltan Посмотреть сообщение
2) Инкапсуляция - скрытие всех, полей, которые использовались для создания этого объекта?
близко, но я бы лучше сказал, что инкапсуляция - это разделение внешнего интерфейса и внутренней реализации. полей может в принципе вообще не быть.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 17:02  [ТС]     Что-то код выдаёт не так #22
А этот вариант?

Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 18:23     Что-то код выдаёт не так #23
Цитата Сообщение от Syltan Посмотреть сообщение
Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта.
А теперь перепиши это определение не используя слова "данные", "код" и "объект"
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 18:56  [ТС]     Что-то код выдаёт не так #24
Инкапсуляция - это скрытие от пользователя полей класса.
Без этих слов не получается.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:01     Что-то код выдаёт не так #25
Syltan, тогда перестань угадывать и попробуй понять смысл того, что такое инкапсуляция. Просто знание формулировки определения ровным счетом ничего не дает
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 19:10  [ТС]     Что-то код выдаёт не так #26
Код
А теперь перепиши это определение не используя слова "данные", "код" и "объект"
Интересно,а как же можно переписать без использования этих слов.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:28     Что-то код выдаёт не так #27
Сокрытие внутренней реализации класса(полей, методов) с возможностью доступа к ним только с помощью открытых методов
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 19:44  [ТС]     Что-то код выдаёт не так #28
Код
с возможностью доступа к ним только с помощью открытых методов
Членов класса?
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:59     Что-то код выдаёт не так #29
Я в скобках сказал к кому . Ну можно и так
Цитата Сообщение от Syltan Посмотреть сообщение
Членов класса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2009, 03:50     Что-то код выдаёт не так
Еще ссылки по теме:
C++ Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы
Выдаёт ошибку mbstowcs() , и так с любыми попытками конвертации с anci и с unicode C++
C++ Код из книги выдаёт ошибку
C++ Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее?
C++ Что в коде ни так? while не работает так, как ожидаю

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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2009, 03:50     Что-то код выдаёт не так #30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Vechicle{
        int passengers;
        int fuelcap;
        int mpg;
public:
        Vechicle():passengers(),fuelcap(),mpg() { }
        Vechicle(int p, int f, int m) { }       
        
 
        int  range()
        {
                return mpg * fuelcap;
        }
        int get_passengers() {return passengers;}
        int get_fuelcap()    {return fuelcap;}
        int get_mpg()        {return mpg;}
};
ты когда программу запустишь, объект, который принадлежит классу Vechicle создастся в памяти в виде капсулы

C++
1
2
3
        int passengers;
        int fuelcap;
        int mpg;
сюда могут помещаться данные в виде чисел, число пассажиров, число горючего, число mpg

но, если что-то захочет видоизменить эти числа, оно не сможет это сделать, потому что капсула доступна только тем методам, которые описаны в том же самом классе

C++
1
2
3
        int  range() {
            return mpg * fuelcap;
        }
метод описан в том же классе, значит может читать переменные и менять переменные, что он и делает, только читая их

C++
1
    Vechicle cars[3];
создал три машины, у каждой инкапсулированы три переменные, переменные одной машины защищены от действий с переменными другой машины
Yandex
Объявления
09.10.2009, 03:50     Что-то код выдаёт не так
Ответ Создать тему
Опции темы

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