2013-07-11 57 views
0

所以我想寫一個類E的複製構造函數,以便它將從每個類中獲取每個int x並將其分配給它的對應部分。我該如何投射右側?類模板和鑄造

class A 
{ 
public: 
    int x; 
}; 

class B: public virtual A 
{ 
public: 
    int x; 
}; 

class C: public virtual A 
{ 
public: 
    int x; 
}; 

class D : public B, public C 
{ 
public: 
    int x; 
}; 

class E: public D 
{ 
public: 
    int x; 

    E(const E& e) 
    { 
     E::x = (E)e.x // problem 
     D::x = ? 
     C::x = ? 
     B::x = ? 
     A::x = ? 
    } 
}; 
+0

不存在模板。另外,爲什麼'int'會投射到'E'的實例? – Marcin

+0

,因爲我想將E的x複製到E的當前實例的x中,對於D和C也是如此,因此在層次結構中也是如此。並沒有模板,有人改變了標題... –

+0

沒有理由施放這個int。 – Marcin

回答

0

你並不需要強制轉換爲int將其分配到一個int。只要做到:

self->x = ((E)e).x; 
D::x = ((D)e).x; 
0
E::x = e.E::x; 
D::x = e.D::x; 
C::x = e.C::x; 
B::x = e.B::x; 
A::x = e.A::x; 

雖然它可能是明智的給每個班級一個合適的拷貝構造函數,用合適的初始化列表中調用基類的拷貝構造函數。