Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 16:09   #1
Bauror
Новичок
Джуниор
 
Регистрация: 29.07.2010
Сообщений: 2
По умолчанию Классы

Здравствуйте.
Изучаю С++ совсем недавно, никак не могу разобраться с классами. В книжке, по которой изучаю С++, в конце главы есть задание:

"Напишите класс, который берет рост человека в дюймах и переводит его в футы"

Я понимаю, что задачка очень простая, но по книге я немного не понял как работать с классами.
Вот код:


Код:
-----rostclass.h---------
#ifndef rostclassH
#define rostclassH

class rostclass {
public:
rostclass ();
~rostclass();
float perevod (float x)
 {
  float y=x*0.8333;
    return y;
    };
};
#endif

Код:
-------Unit1.cpp---------------
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#include "rostclass.h"
#pragma hdrstop

//---------------------------------------------------------------------------
#pragma argsused

int main(int argc, char* argv[])
{
float rostd;
float rostf;
cout << "Введите рост человека в Дюймах: "<< endl;
cin >> rostd;

rostf=rostclass :: perevod(rostd);

cout << "Рост человека в футах= " << rostf << endl;
getch();

        return 0;
}

Ошибка в строчке, которая выделена жирным, я знаю, что это не правильно, но никак не пойму как обращаться к функции через класс.

Последний раз редактировалось Stilet; 29.07.2010 в 17:07.
Bauror вне форума Ответить с цитированием
Старый 29.07.2010, 16:56   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
static float perevod (float x)
А по теме, вы таки не понимаете зачем нужны объекты
Читайте книжку дальше, до просветления
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 29.07.2010, 17:34   #3
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

нужно создать переменную типа класса
rostclass rt;

rostf=rt->perevod(rostd);
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 29.07.2010, 17:43   #4
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
rostclass rt;

rostf=rt->perevod(rostd);
тогда уж вот так:
rostf=rt.perevod(rostd);
ThisIzGame вне форума Ответить с цитированием
Старый 29.07.2010, 19:21   #5
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Я бы, попробовал, примерно, следующее:

Код:
int main(int argc, char* argv[])
{
        float *p= new rostclass;
        rostclass rost;
        float rostd, rostf;

        cout<<"Введите рост человека в дюймах: "<<endl;
        cin>>rostd;
        rostf= rost.perevod(rostd);

        cout<<"Рост человека в футах: "<<rostf<<endl;
        delete p;
        getch();
        return 0;
}
А еще лучше, подучите С++ в Borland C++ Builder(вы ведь в ней работаете?)...
vasek123 вне форума Ответить с цитированием
Старый 29.07.2010, 20:04   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Bauror
1. Функции-члены класса почти всегда вызываются для данного конкретного объекта этого класса (для экземпляра класса) - исключение составляют static-функции. Совершенно аналогично обращение к данным происходит только через конкретный объект (опять же за исключением static-членов)
Код:
class A
{
void foo();   //Самая обычная функция. Имеет смысл только как функция экземпляра класса
static void bar();   //static-функция - одна на все объекты данного класса. Вызывается через имя класса
};

int main()
{
A obj;   //Экземпляр класса
obj.foo();   //Обычные функции вызываются для экземпляров класса
A::bar();   //static-функции вызываются по форме classname::funcname()
}
2. VCL - Visual Component Library (Библиотека визуальных компонентов), поэтому включать ее в консольном приложении нет никакого смысла.
3. В современном C++ стандартные header'ы подключаются без .h в имени:
Код:
//#include <vlc.h> - этого в консоли быть не должно!
#include <iostream>   //Часть стандартной библиотеки C++, не iostream.h
#include <conio.h>   //А вот conio в стандарте языка нет, хотя во многих IDE такой header есть, поэтому здесь будет .h
vasek123
Цитата:
Код:
float *p= new rostclass;

Цитата:
А еще лучше, подучите С++ в Borland C++ Builder
Скорее, стоит просто подучить C++, без разницы в какой среде разработки. Стандартный C++ - он один на всех.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.07.2010, 22:15   #7
Bauror
Новичок
Джуниор
 
Регистрация: 29.07.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Код:
static float perevod (float x)
А по теме, вы таки не понимаете зачем нужны объекты
Читайте книжку дальше, до просветления
Да, скорее всего до конца еще не понимаю, я даже сомневаюсь, что я правильно понял это задание, мне кажется вводимые переменные тоже должны содержатся внутри класса, так будет правильнее, просто не понял как это сделать и решил начать с более простого

Цитата:
Сообщение от Гром Посмотреть сообщение
Bauror
1. Функции-члены класса почти всегда вызываются для данного конкретного объекта этого класса (для экземпляра класса) - исключение составляют static-функции. Совершенно аналогично обращение к данным происходит только через конкретный объект (опять же за исключением static-членов)
Код:
class A
{
void foo();   //Самая обычная функция. Имеет смысл только как функция экземпляра класса
static void bar();   //static-функция - одна на все объекты данного класса. Вызывается через имя класса
};

int main()
{
A obj;   //Экземпляр класса
obj.foo();   //Обычные функции вызываются для экземпляров класса
A::bar();   //static-функции вызываются по форме classname::funcname()
}
2. VCL - Visual Component Library (Библиотека визуальных компонентов), поэтому включать ее в консольном приложении нет никакого смысла.
3. В современном C++ стандартные header'ы подключаются без .h в имени:
Код:
//#include <vlc.h> - этого в консоли быть не должно!
#include <iostream>   //Часть стандартной библиотеки C++, не iostream.h
#include <conio.h>   //А вот conio в стандарте языка нет, хотя во многих IDE такой header есть, поэтому здесь будет .h
vasek123
Как раз хотел написать, что для меня сейчас важнее не решить это задание, а понять, как делается и почему, а тут все так хорошо расписано.

Цитата:
Скорее, стоит просто подучить C++, без разницы в какой среде разработки. Стандартный C++ - он один на всех.
Цитата:
А еще лучше, подучите С++ в Borland C++ Builder(вы ведь в ней работаете?)...
Как раз этим и занимаюсь, очень нравится, но одному справляться порой сложно.

Ну и всем, спасибо большое за советы, очень помогли, я рад, что на этом форуме столь снисходительно относятся к новичкам
Bauror вне форума Ответить с цитированием
Старый 29.07.2010, 22:35   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
class Growth{
public:
   Growth( const float inches )
      : inches_m( inches ){}
   float Pounds() const {
      return inches_m * 0.8333;
   }
protected:
   float inches_m;
};
Класс лучше бы сделать примерно таким о_О
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в С++ Rammashka Помощь студентам 4 01.05.2010 20:45
Классы. MAKEDON Общие вопросы C/C++ 1 24.07.2009 18:35
классы elenSV Помощь студентам 0 11.05.2009 10:11
классы elenSV Помощь студентам 0 01.05.2009 19:33