C++基礎:: struct vs class

Inside_Zhang發表於2015-11-13

struct:所有成員都是public

當我們需要直接訪問結構或者類的資料成員時,而不欲打破類(class)對資料成員都是protected或者private的約定俗成的規範(convention),這時struct便是一個更為合適的選擇,比如C++標準庫對pair工具類(在<utility>中定義)的設計:

namespace std
{
    template<typename T1, typename T2>
    struct pair
    {
        // member
        T1 first;
        T2 last;
    }
}

因為我們在客戶端程式設計時,是把pair物件當做一種容器來使用的,既然是容器,存取元素便是基本操作:

std::pair<T1, T2> p = getAPair();
p.first ...
p.second ...

function object

當作為仿函式的一些類沒有特別的資料成員時或者繼承體系時,而且主要是一個括號運算子過載(operator())時,一般使用struct來定義:

我們暫且以一元運算unary_negate為例:

template<typename Arg, typename Result>
struct unary_function
{
    typedef Arg argument_type;
    typedef Result result_type;
}

template<typename T>
struct negate :public unary_function<T, T>
{
    T operator()(const T& x)const 
    {
        return -x;      
                // 本質的操作就這一句,
                // 接收一個T型別的變數,返回其負值
    }
}

客戶端程式:

int main(int, char**)
{
    std::vector<int> src{0, 1, 2, 3, 4};
    std::vector<int> dst(src.size());
    std::transform(ivec.begin(), ivec.end(), 
                dst.begin(), 
                ::negate<int>());
    std::copy(dst.begin(), dst.end(), 
                std::ostream_iterator<int>(std::cout, " "));
    return 0;
}

相關文章