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

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

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

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

07.10.2009, 16:24. Просмотров 1618. Ответов 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;}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2009, 16:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что-то код выдаёт не так (C++):

При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так? - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; long Fact(short m)// функция вычисления факториала ...

Ошибки выдаёт ( не пойму причину, что не так? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int Area(float a, float b,...

Не работает код, скажите что не так) - C++
вот код немогу понять почему выдает ошыбки. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; ...

Код Виженера. Не полностью выполняется. Что не так? - C++
Программ на тему код Виженера достаточно много и здесь на форуме, и в интернете.. Решила не искать легкого пути, готовое, а разобраться...

Народ гляньте код и подскажите что не так. - C++
Условие: Написать функцию, которая округляет любое вещественное число до определённого количества знаков с математической точностью. ...

Преобразовать код так, что бы ввод данных осуществлялся из файла - C++
Задание 2. Создал структуру: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; using namespace std; struct sity { ...

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

2) Инкапсуляция - скрытие всех, полей, которые использовались для создания этого объекта?
0
M128K145
Эксперт С++
8293 / 3513 / 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.) И тебе важно как у тебя устроен организм? Нет, поэтому все скрыто от тебя под кожей.
Что такое код и данные относительно ООП? Таких понятий в самом ООП нет.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.10.2009, 16:47 #21
Цитата Сообщение от Syltan Посмотреть сообщение
1)
Код
Код - это функции-члены класса, в которых описан код.
Данные - это переменные, описанные в самом классе, а не в функциях.
Это определение верно?
значение слова "код" зависит от контекста. данные не обязательно описаны в классе. они могут быть где-то вообще снаружи.

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

Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 18:23 #23
Цитата Сообщение от Syltan Посмотреть сообщение
Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта.
А теперь перепиши это определение не используя слова "данные", "код" и "объект"
0
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 18:56  [ТС] #24
Инкапсуляция - это скрытие от пользователя полей класса.
Без этих слов не получается.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:01 #25
Syltan, тогда перестань угадывать и попробуй понять смысл того, что такое инкапсуляция. Просто знание формулировки определения ровным счетом ничего не дает
0
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 19:10  [ТС] #26
Код
А теперь перепиши это определение не используя слова "данные", "код" и "объект"
Интересно,а как же можно переписать без использования этих слов.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:28 #27
Сокрытие внутренней реализации класса(полей, методов) с возможностью доступа к ним только с помощью открытых методов
0
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 19:44  [ТС] #28
Код
с возможностью доступа к ним только с помощью открытых методов
Членов класса?
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 19:59 #29
Я в скобках сказал к кому . Ну можно и так
Цитата Сообщение от Syltan Посмотреть сообщение
Членов класса
0
accept
4823 / 3244 / 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];
создал три машины, у каждой инкапсулированы три переменные, переменные одной машины защищены от действий с переменными другой машины
1
09.10.2009, 03:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2009, 03:50
Привет! Вот еще темы с ответами:

Почему код не работает хотя ошибок нет? Что-то не так с выделением памяти? - C++
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int n = 0; double a, b; ...

Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы - C++
Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы: Проверить, есть ли во...

Выдаёт ошибку mbstowcs() , и так с любыми попытками конвертации с anci и с unicode - C++
#include &lt;iostream&gt; using namespace std; void main() { char buffer = &quot;mbstowcs converts ANSI-string to Unicode-string&quot;; //...

Код из книги выдаёт ошибку - C++
Код из книги выдаёт ошибку. Использую Visual Studio 2010 Exspress //: CO3:Forward.cpp // Опережающие объявления функций и данных ...


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

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

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