假設我有一個基類A和一個派生類B,它添加了一些額外的成員。現在我想爲B類設置一個setter函數,它直接加入自己的成員,但是使用臨時的A對象批量派生派生成員。下面是一些示例代碼:「我可以」我可以像訪問對象一樣訪問對象的「基礎部分」嗎?
class A
{
public:
int x;
int y;
A(int arg1, int arg2)
: x(arg1), y(arg2) {}
};
class B : public A
{
public:
int z;
B(int arg1, int arg2, int arg3)
: A(arg1, arg2), z(arg3) {}
void setB(int arg1, int arg2, int arg3) {
/*something here*/ = A(arg1, arg2);
this->z = arg3;
}
};
//編輯 我想我是不太清楚這個問題是不是真的而是「我怎麼能?」。爲了更具體些:我可以把什麼代替/*something here*/
使組B()的實際工作一樣:
void setB(int arg1, int arg2, int arg3) {
this->x = arg1;
this->y = arg2;
this->z = arg3; }
你自己嘗試過嗎?我看到沒有問題。同樣,考慮你想達到什麼,這似乎不是一個好主意。 – JKreiser
你*可以,*但在這裏要非常小心。如果你打算通過'A'來引用'B'對象,你可能想要包含一個虛擬析構函數,以便在所有可能使用它們的上下文中使用多態類型獲得適當的銷燬行爲,並查看[切片問題。](http://stackoverflow.com/questions/274626/what-is-object-slicing) – jaggedSpire
@jaggedSpire在這種情況下可以切片導致問題?我不認爲它可以,但也許我錯了。 – Brian