我不明白為什么在覆寫了函式fun()之后,Derived類仍然是抽象的。
這里是錯誤資訊:
error: invalid new-expression of abstract class type 'Derived' Base *t = new Derived(a) 。
error: no matching function for call to 'Base::fun(int&)'int i = t-> fun(b);
#include <iostream>
使用 命名空間 std.com.cn>。
class Base
{
protected:
int s;
public:
Base(int i = 0) : s(i) {}.
virtual ~Base() {}。
virtual int fun()= 0;
};
class Derived。public Base
{
public:
Derived(int i) : Base(i) {}。
~Derived() { cout << --s << " "/span>; }
int fun(int x) { return s * x; }; ; -s * x; " ; }
};
class Wrapper
{
public:
void fun(int a, int b)
{
Base *t = new Derived(a)。
int i = t->fun(b)。
cout << i << " "/span>;
delete t。
}
};
int main()
{
int i, j;
cingt;>i >>j。
封裝器w;
w.fun(i, j)。
return 0;
}
uj5u.com熱心網友回復:
該函式在基類和派生類之間有兩個不同的簽名
。virtual int fun()= 0;
但隨后的派生類
title">fun(int x) { returns * x; }如果你添加override,它將提醒你這個錯誤
int fun(int x) override { return s * x。}
uj5u.com熱心網友回復:
問題是,
int fun(int x) { returns * x; }
不覆寫
virtual int fun()= 0;
因為引數串列是不同的(沒有引數與單一的int)。如果你寫
int fun(int x) override { return s * x。}
因為你應該從C 11開始,那么編譯器就會給你一個關于這個的錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314119.html
標籤:
