如何使用"界面"在C ++中

时间:2015-02-05 04:50:12

标签: c++ stl

我实际上正在开发一个项目,它有一个像这样的文件。

#include "Preference.h"

#include <string>
#include <list>
#include <exception>

namespace MedicalStudentMatcher
{
    class PreferenceException: public std::exception
    {
    public:
        PreferenceException(std::string message) : m_message(message) {}

        virtual ~PreferenceException() { }

        virtual const char* what() const throw()
        {
            return m_message.c_str();
        }

    private:
        std::string m_message;

    };

    class PreferenceReader
    {
    public:
        PreferenceReader(std::string filename);
        virtual ~PreferenceReader();

        std::list<Preference<std::string, std::string>> ReadPreferences();

    private:
        std::string m_filename;

        std::string trim(std::string str);
    };
}


现在的问题是 1.构造函数如何工作? (请记住,我是C ++中STL的新手,以及C ++中的任何一种高级方法) 2.解释what()函数的语法。(为什么有两个const然后是char *然后抛出)
3.以下行是什么意思

std::list<Preference<std::string, std::string>> ReadPreferences();

4。我想遍历这个列表。我该怎么做呢?

list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
    list<Preference<string, string>> studentPrefs = studentReader.ReadPreferences();
    list<Match<string, string>> matches;

5。模板类如何在以下情况下工作
以及优先级如何使用它。什么是P m_preferrer声明?如何&#34;初始化列表&#34;在这种情况下工作?

template <class P, class O>
    class Preference
    {
    private:
        P   m_preferrer;
        O   m_preferred;
        int m_value;

    public:
        Preference(const P& preferrer, const O& preferred, int value) : m_preferrer(preferrer), m_preferred(preferred), m_value(value) {}
        virtual ~Preference() {}

        P   getPreferrer() const { return m_preferrer; }
        O   getPreferred() const { return m_preferred; }
        int getValue()     const { return m_value; }


    };

    template <class P, class O> 
    bool less_than(const Preference<P, O>& p1, const Preference<P, O>& p2)
    {
        return p1.getValue() < p2.getValue();
    }
} 

即使经过彻底的谷歌搜索,我也找不到这些问题的答案。
请帮忙。如果您需要有关其他文件的更多信息,请发表评论。

1 个答案:

答案 0 :(得分:2)

  1. PreferenceException构造函数使用&#34;初始化列表&#34;设置m_message。现在您已了解该术语,您可以搜索它以了解更多信息。
  2. virtual const char* what() const throw()声明&#34;一个虚拟(运行时多态)函数,它返回指向(数组)字符的指针,其中该指针不能用于修改这些字符。&#34;尾随&#34; const throw()&#34; mean&#34;此函数不能修改其隐式this参数,即它不能修改调用它的类的实例,也不能抛出任何异常。&#34;
  3. 这是一个成员函数声明。该功能应在别处定义。该函数返回(双重链接)首选项列表。
  4. 试试这个:

  5. list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
    for (Preference<string, string>& pref : hospitalPrefs)
    {
        // do something with pref
    }
    

    或者,如果您依赖于C ++ 98而不是C ++ 11:

    list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
    for (list<Preference<string, string>>::iterator it = hospitalPrefs.begin(); it != hospitalPrefs.end(); ++it)
    {
        // do something with pref
    }