2016-09-22 81 views
1

這就是我的代碼的樣子。它有點簡化。我試圖/想知道如果我能做的是消除在屬性類構造函數中的參數的需要。即調用一個無參數構造函數,並且仍然能夠使用struct value1 item變量填充類項變量,而無需將它們作爲構造函數體的一部分添加。從一個類型的結構中獲取值

#include <iostream> 

using namespace std; 

struct value1 
{ 
    const int item; 
    value1(int n) : item(n) { } 
}; 

struct value2 : public value1 
{ 
    value2() : value1(55) { }; 
}; 

template <class T> 
class property 
{ 
public: 
    property(T stuff); 
    void print(); 
private: 
    int item; 
}; 

template <class T> 
property<T>::property(T stuff) : item(stuff.item) { } 

template <class T> 
void property<T>::print() 
{ 
    cout << item << endl; 
} 

int main() 
{ 
    property<value2> *y = new property<value2>(value2()); 

    y->print(); 

    return 0; 
} 
+0

所以你只是想建立一個初始化對象的成員默認構造函數? –

+0

是的,但沒有在構造函數的主體中初始化對象 –

+0

我想我不明白你在問什麼。您使用構造函數來創建對象的實例。你不會在構造函數的主體中初始化一個對象。你初始化那裏的對象的成員。 –

回答

1

調用無參數的構造函數,並仍然能夠填充與結構值1項變量的類項變量不添加它們作爲構造體的一部分

這聽起來像你只需想要一個工廠方法:

template <class T> 
class property { 
public: 
    property(); 
    void print(); 

    static property<T> create(T stuff) { 
     property<T> p; 
     p.item = stuff.item; 
     return p; 
    } 

private: 
    int item; 
}; 

,因爲它遵循你可以調用它:

auto p = property<value2>::create(value2()); 

即使我不確定我是否完全滿足您的要求。
讓我知道,如果我不明白這個問題,我會刪除答案。

0

您可以使用函數對象來實現。 請找到下面的代碼:

struct value1 
{ 
    const int item; 
    value1(int n) : item(n) { } 
}; 

struct value2 : public value1 
{ 
    value2() : value1(55) { }; 
}; 

template <class T> 
class property 
{ 
public: 
    property(); 
    void operator() (T i) 
    { 
     item = i.item; 
    } 
    void print(); 
private: 
    int item; 
}; 

template <class T> 
property<T>::property() { } 

template <class T> 
void property<T>::print() 
{ 
    cout << item << endl; 
} 

int main() 
{ 
    property<value2> *y = new property<value2>(); 
    (*y)(value2()); 
    y->print(); 
    return 0; 
} 
相關問題