Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как инициализировать строку в конструкторе???


Автор: andrew22 22.11.2012, 21:27
Доброго времени суток!
В моей программе у объектов класса есть три целочисленных параметра, которые инициализируются конструктором, надо добавить еще параметр (строку).
Я не знаю как  инициализировать строку в конструкторе? Может быть кто подскажет как? Желательно двумя способами: через массив символов и через 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;
}
    

Автор: mes 22.11.2012, 22:58
http://www.cplusplus.com/reference/string/string/ уже все это решил.. 

Автор: dershokus 23.11.2012, 13:16
Код

#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(...) который присваивает значения. Хотя можно выкидывать эксепшон в конструкторе....

Автор: NoviceF 24.11.2012, 08:33
Вот так со стрингом всё инициализируется и работает:

Код

#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

Автор: andrew22 24.11.2012, 11:16
NoviceF и dershokus, спасибо огромное, вы очень помогли мне smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)