恐怕這是不可能的:
class A {
public:
A(){}
virtual string s() = 0
string s(int i) {
auto j = this->s();
... modify j ...
return j;
};
class B: public A{
public:
B() : A() {}
string s() override {
return string("Class B"); // just some string
}
};
換句話說:你不能有兩個成員函式變體,只有一個是虛擬的?這種觀察是否正確?
uj5u.com熱心網友回復:
您可以在基類和派生類中使用具有相同名稱的虛擬和非虛擬函式。
在您問題中的類示例中,派生類 B 中虛函式 s 的定義隱藏了基類 A 中宣告的同名非虛函式。
string s() override {
return string("Class B"); // just some string
}
要使其在派生類的范圍內可見,您可以使用 using 宣告。
這是一個演示程式。
#include <iostream>
#include <string>
int main()
{
struct A
{
std::string f( int i ) const
{
return f() '(' std::to_string( i ) ')';
}
virtual std::string f() const
{
return "struct A";
}
virtual ~A() = default;
};
struct B : A
{
using A::f;
virtual std::string f() const override
{
return "struct B";
}
};
B b;
std::cout << b.f( 1 ) << '\n';
A &rb = b;
std::cout << rb.f( 2 ) << '\n';
A a;
std::cout << a.f( 3 ) << '\n';
}
程式輸出是
struct B(1)
struct B(2)
struct A(3)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/396930.html
上一篇:如何使用一個類來存盤在不同函式中更新的變數,然后在不同的函式中呼叫這些更新的變數?
下一篇:jQuery將元素放入div
