Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как инициализировать строку в конструкторе??? 2-мя способами (массив, string) 
V
    Опции темы
andrew22
Дата 22.11.2012, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.11.2012

Репутация: нет
Всего: нет



Доброго времени суток!
В моей программе у объектов класса есть три целочисленных параметра, которые инициализируются конструктором, надо добавить еще параметр (строку).
Я не знаю как  инициализировать строку в конструкторе? Может быть кто подскажет как? Желательно двумя способами: через массив символов и через string, используя мой код. Например параметр model.
Код

#include<iostream>
#include<conio.h>
using namespace std;
class Vehicle{
   public:
          int passengers;
          int fuelcap;
          int mpg;
          Vehicle(int p, int f, int m);
                 
          };
          Vehicle::Vehicle(int p, int f, int m){
                               passengers=p;
                               fuelcap=f;
                               mpg=m;                                                              
                               }
          
        
int main()
{
    Vehicle minivan(7,16,21);                    // как инициализировать строку в конструкторе???
    Vehicle sportscar(2,14,12);
    int range1, range2;                 
    

   range1 = minivan.range();           
   range2 = sportscar.range();
   
   cout<<"Минивен может перевести "<<minivan.passengers<<" passagirov na rasstoyanie "<<range1<<" kilometrov "<<endl;
   cout<<"\nSportscar mozhet perevesti "<<sportscar.passengers<<" passagirov na rasstoyanie "<<range2<<" kilometrov "<<endl;
   getch();
   return 0;
}
    

PM MAIL   Вверх
mes
Дата 22.11.2012, 22:58 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



std::string  уже все это решил.. 



--------------------
PM MAIL WWW   Вверх
dershokus
Дата 23.11.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 7.8.2011

Репутация: нет
Всего: 1



Код

#include<iostream>
#include<conio.h>
using namespace std;
class Vehicle{
   public:
          int passengers;
          int fuelcap;
          int mpg;
          char m_str[128];
          Vehicle(int p, int f, int m,char* str);
                 
          };
          Vehicle::Vehicle(int p, int f, int m,const char* str) : passengers(p),fuelcap(f),mpg(m) {
                  memset(m_str,0,sizeof(m_str));
                  if(!str) return;                             // <- вот из-за этого так лучше не делать
                  strncpy(m_str,str,sizeof(m_str)-1);
                               }

Не делать так лучше из-за того, что мы не можем быть точно уверены - проинициализировался обьект полностью или возникли какие-то ошибки т.к. он не возвращает значение (return void). Лучше делать какой-нить метод типа Init(...) который присваивает значения. Хотя можно выкидывать эксепшон в конструкторе....

Это сообщение отредактировал(а) dershokus - 23.11.2012, 13:17
PM MAIL   Вверх
NoviceF
Дата 24.11.2012, 08:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



Вот так со стрингом всё инициализируется и работает:

Код

#include <iostream>
#include <memory>
#include <string>

using namespace std;
class Vehicle
{
public:
    int passengers;
    int fuelcap;
    int mpg;
    string String;

    Vehicle(int p, int f, int m, string str = "");                 
};
         
Vehicle::Vehicle(int p, int f, int m, string str) : 
    passengers(p), 
    fuelcap(f), 
    mpg(m),
    String(str)
    {}
          
        
int main()
{
    Vehicle minivan(7,16,21 /*, "qwer"*/);                    // как инициализировать строку в конструкторе???
    cout << minivan.passengers << endl << minivan.fuelcap << endl
        << minivan.mpg << endl << minivan.String << endl;
//    cout << "test";
//   range1 = minivan.range();           
//   range2 = sportscar.range();
   
//   cout<<"Минивен может перевести "<<minivan.passengers<<" passagirov na rasstoyanie "<<range1<<" kilometrov "<<endl;
//   cout<<"\nSportscar mozhet perevesti "<<sportscar.passengers<<" passagirov na rasstoyanie "<<range2<<" kilometrov "<<endl;
//   getch();
   return 0;
}


http://codepad.org/J8tErfzs

Это сообщение отредактировал(а) NoviceF - 24.11.2012, 08:33
PM MAIL   Вверх
andrew22
Дата 24.11.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 15.11.2012

Репутация: нет
Всего: нет



NoviceF и dershokus, спасибо огромное, вы очень помогли мне smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.