инициирующие списки в списке инициализации конструктора - PullRequest
0 голосов
/ 12 июня 2010

Я только что перешел с C на C ++ и теперь работаю со списками.У меня есть класс с именем «message», и мне нужно иметь класс с именем «line», который должен иметь список сообщений в своих свойствах.как я узнал, свойства объекта должны быть инициализированы в списке инициализации конструктора, и у меня было «побуждение» инициализировать список сообщений в дополнение к остальным свойствам (некоторые строки и двойники).это "побуждение" оправдано?нужно ли инициализировать список?

вот мой код.
цель состоит в том, чтобы создать пустой список строк, а конструктор, о котором я говорю, находится в line.cpp

//-------------------
//Code for line.h:
//-------------------

#ifndef LINE_H_
#define LINE_H_

#include "message.h"
#include <string>
#include <list>
using namespace std;

namespace test
{
    using std::string;

    class Line
    {
        public:
            // constractor with parameters
            Line(const string& phoneStr, double callRate, double messageRate);

            //function to get phone string
            string getPhoneStr() const;

            double getCallRate() const;

            double getMessageRate() const;

            double getLastBill() const;

            void addMessage(const string& phoneStr);


        private:
            string mPhoneStr;
            list<Message> mMessages;
            double mMessageRate;
            double mLastBill;
    };
}

#endif /* LINE_H_ */


//-------------------
//Code for line.cpp:
//-------------------

#include "line.h"

namespace test
{
    Line::Line(const string& phoneStr, double callRate, double messageRate)
        : mPhoneStr(phoneStr), mCallRate(callRate), mMessageRate(messageRate),
        mLastBill(0) {}

    //getters:

    string Line::getPhoneStr() const
    {
        return mPhoneStr;
    }

    double Line::getCallRate() const
    {
        return mCallRate;
    }

    double Line::getMessageRate() const
    {
        return mMessageRate;
    }

    double Line::getLastBill() const
    {
        return mLastBill;
    }


}


//-------------------
//Code for message.h:
//-------------------

#ifndef MESSAGE_H_
#define MESSAGE_H_

#include <string>

namespace test
{
    using std::string;

    class Message
    {
        public:
            // constractor with parameters
            Message(const string& phoneStr);

            //function to get phone string
            string getPhoneStr() const;

            //function to set new phone string
            void setPhoneStr(const string& phoneStr);


        private:
            string mPhoneStr;
    };
}
#endif /* MESSAGE_H_ */

//-----------------------------------------------------------------------

//---------------------
//code for message.cpp:
//---------------------


#include "message.h"

namespace test
{

    Message::Message(const string& phoneStr) : mPhoneStr(phoneStr) {}

    string Message::getPhoneStr() const
    {
        return mPhoneStr;
    }

    void Message::setPhoneStr(const string& phoneStr)
    {
        mPhoneStr = phoneStr;
    }

}

Ответы [ 2 ]

2 голосов
/ 12 июня 2010

Список инициализации предназначен для инициализации любых базовых классов и переменных-членов. Тело конструктора предназначено для запуска любого другого кода, который вам нужен, прежде чем объект можно будет считать инициализированным.

Мне трудно понять вашу ситуацию, но, надеюсь, вышесказанное поможет.

0 голосов
/ 12 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...