我在派生類中有一個值,我想使用基類中的函數返回,這有可能嗎?或者我必須在基類中聲明變量才能這樣做?從派生類到基類的返回值
我只是在派生類中調用函數嗎?
class Base
{
public:
int getNum() const { return number; }
};
class Derived : public Base
{
private:
int n = 50;
};
我在派生類中有一個值,我想使用基類中的函數返回,這有可能嗎?或者我必須在基類中聲明變量才能這樣做?從派生類到基類的返回值
我只是在派生類中調用函數嗎?
class Base
{
public:
int getNum() const { return number; }
};
class Derived : public Base
{
private:
int n = 50;
};
我有,我想用一個函數從基類返回派生類的值,這可能嗎?
是的,你可以使用傳遞給基類的構造函數,像這樣的引用:
class Base
{
public:
Base(int& number_) : number(number_) {}
int getNum() const { return number; }
private:
int& number;
};
class Derived : public Base
{
public:
Derived() : Base(n) {}
private:
int n = 50;
};
另一種方式來做到這一點(不使用virtual getNum() const;
)使用模板基類(又名靜態多態性):
template <typename D>
class Base
{
public:
int getNum() const { return static_cast<D*>(this)->getNum(); }
};
class Derived : public Base<Derived>
{
public:
Derived() {}
int getNum() const { return n; }
private:
int n = 50;
};
要做到這一點的方法是通過虛擬功能。基類不必派生類成員的直接訪問,但它可以訪問所導出的類中定義的方法中,如果它們是定義的虛擬方法如下:
class Base
{
public:
virtual int getNum() const = 0;
};
class Derived : public Base
{
public:
virtual int getNum() const {
return n;
}
private:
int n = 50;
};
下面是一個使用例如:
int main() {
Base* b = new Derived;
std::cout << b->getNum();
delete b;
}
不應該這'虛擬INT getNum()const的摘要;''是虛擬INT getNum()const的= 0;'? –
是的。 'abstract'在C++中不是關鍵字。 – Puppy
這是我正在尋找,謝謝我現在可以睡覺。 – 4tehlolxz