這裏是我的代碼:當執行objPtr->displayModel()
基類指針只獲取派生類變量值而不是基類變量值爲什麼?
#include<iostream>
using namespace std;
class Shape
{
char obj;
public:
int j;
Shape();
void displayModel();
};
class Line : public Shape
{
char obj;
public:
Line();
void displayModel();
};
Shape::Shape()
{
obj = 'S';
j = 1;
}
void ::Shape::displayModel()
{
cout << obj;
cout << " Shape j:" << j << endl;
}
Line::Line()
{
obj = 'L';
j = 5;
}
void Line::displayModel()
{
cout << obj;
cout << " Line j:" << j << endl;
}
int main()
{
Shape *objPtr = NULL, s;
Line l;
objPtr = &l;
s.displayModel();
l.displayModel();
objPtr->displayModel();
return 0;
}
我的疑問是爲什麼j=5
而不是j=1
?我知道objPtr
被分配到對象l
的地址。但是我還沒有在Shape::displayModel()
中聲明virtual
關鍵字,所以這並不意味着編譯器應該檢查對象的type
而不是它指向的內容?或者是否僅在函數調用時發生virtual
關鍵字聲明且不包含變量?
所以基本上我的疑問是爲什麼objPtr->displayModel()
打印j=5
而不是j=1
?
您的基類不是虛擬的。 'objPtr-> displayModel()'調用'Shape :: displayModel()'打印'Shape :: j'。 –
@Jonathan Potter但是接下來不是Shape :: j的值初始化爲1.那麼爲什麼j = 5呢? – Mutex202