日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

發布時間:2024/10/12 java 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

Possible Duplicate:

C++ Virtual/Pure Virtual Explained

虛函數和純虛函數有什么區別?

CPP中的純虛函數與Java中的抽象方法是一樣的。

stackoverflow.com/questions/1306778/…副本

可以在派生類中重寫虛函數。純虛函數必須在派生類中重寫。具體來說,除非至少有一個派生類重寫了該虛函數,否則不能用純虛函數實例化類。

維基百科:

A pure virtual function or pure virtual method is a virtual function that is required to be implemented by a derived class that is not abstract. Classes containing pure virtual methods are termed"abstract;" they cannot be instantiated directly, and a subclass of an abstract class can only be instantiated directly if all inherited pure virtual methods have been implemented by that class or a parent class. Pure virtual methods typically have a declaration (signature) and no definition (implementation).

那么,在Java術語中,這是否意味著一個虛擬函數是簡單的"(實例)方法",一個純粹的虛擬是"抽象方法"?

@是的,但是需要在派生類中實現該方法。這是"純虛擬"和"虛擬"的區別

是的,Java中的所有方法都是虛擬的(除了那些標記為EDCOX1,0,顯然),所以在討論Java時,這個術語有點多余。然而,在C++和C語言等語言中,它不是冗余的,默認情況下方法不是虛擬的。

純虛函數是一個必須由派生類重新定義的虛函數,因此通常在基類中沒有實現(盡管可以提供它,但派生類通過作用域解析運算符調用它;感謝@mark ransom和@toolbox指出它)。

如果一個類有純虛方法,它就不能被實例化,因此從抽象類(即具有純虛方法的類)派生的任何類都必須定義這種方法才能被實例化。

例子:

#include

using std::cout;

using std::endl;

class BaseClass

{

public:

// A"normal" virtual function which provides a default implementation

virtual void OnlyVirtual()

{

cout<

}

// A"normal" pure virtual function: must be redefined, no default

// implementation

virtual void PureVirtual()=0;

// A pure virtual function that provides a default implementation that can

// be called only explicitly via scope-resolution operator

virtual void PureVirtualWImpl()=0;

};

void BaseClass::PureVirtualWImpl()

{

cout<

}

class Derived0 : public BaseClass

{

public:

// Define the pure virtual function

virtual void PureVirtual()

{

cout<

}

// notice that, even if there's an implementation of PureVirtualWImpl in

// BaseClass, since it's marked as pure, Derived0 cannot still be

// instantiated

};

class Derived1 : public Derived0

{

public:

// PureVirtual is already defined by the parent class Derived0

// I must define also PureVirtualWImpl if I want to instantiate this class

virtual void PureVirtualWImpl()

{

cout<

}

};

class Derived2 : public Derived1

{

public:

// Obviously I can redefine the"normal" virtual function

virtual void OnlyVirtual()

{

cout<

}

// Redefine PureVirtual

virtual void PureVirtual()

{

cout<

}

// Just for fun I can redefine PureVirtualWImpl to call the base normally-

// unaccessible implementation

virtual void PureVirtualWImpl()

{

BaseClass::PureVirtualWImpl();

}

};

void TestClass(BaseClass & C)

{

C.OnlyVirtual();

C.PureVirtual();

C.PureVirtualWImpl();

}

int main()

{

// BaseClass b; //

// Derived0 d0; //

Derived1 d1;

Derived2 d2;

TestClass(d1);

TestClass(d2);

}

輸出:

BaseClass::OnlyVirtual

Derived0::PureVirtual

Derived1::PureVirtualWImpl

Derived2::OnlyVirtual

Derived2::PureVirtual

BaseClass::PureVirtualWImpl

實際上,可以在基類中提供純虛擬函數的實現。派生類被強制重寫它,但它仍然可以使用范圍運算符調用。

這不一定是真的。如果需要,您可以為純虛擬函數提供實現,這在實踐中并不常見。如果您希望在派生版本中使用實現細節,但仍然希望強制所有派生類提供實現,那么這種情況可能很有用。

@toolbox@markransom如果永遠都不使用純虛擬函數的基本實現,那么為什么還要使用它呢?

@雅各布:以東十一〔一〕號

@馬克·蘭索姆:修好了,謝謝。

@藍調啊是的。

總結

以上是生活随笔為你收集整理的java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。