麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Bjarne:可以在構(gòu)造函數(shù)中調(diào)用虛擬函數(shù)嗎?

2019-11-17 05:12:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  可以,但是要小心。它可能不象你期望的那樣工作。在構(gòu)造函數(shù)中,虛擬調(diào)用機(jī)制不起作用,因?yàn)槔^續(xù)類的重載還沒(méi)有發(fā)生。對(duì)象先從基類被創(chuàng)建,“基類先于繼續(xù)類(base before derived)”。

  看看這個(gè):

#include<string>
#include<iostream>

using namespace std;

class B {
 public:
  B(const string& ss) { cout << "B constrUCtor/n"; f(ss); }
  virtual void f(const string&) { cout << "B::f/n";}
};

class D : public B {
public:
 D(const string & ss) :B(ss) { cout << "D constructor/n";}
 void f(const string& ss) { cout << "D::f/n"; s = ss; }
PRivate:
 string s;
};

int main()
{
 D d("Hello");
}
  程序編譯以后會(huì)輸出:

B constructor
B::f
D constructor
  注重不是D::f。設(shè)想一下,假如出于不同的規(guī)則,B::B()可以調(diào)用D::f()的話,會(huì)產(chǎn)生什么樣的后果:因?yàn)闃?gòu)造函數(shù)D::D()還沒(méi)有運(yùn)行,D::f()將會(huì)試圖將一個(gè)還沒(méi)有初始化的字符串s賦予它的參數(shù)。結(jié)果很可能是導(dǎo)致立即崩潰。

  析構(gòu)函數(shù)在“繼續(xù)類先于基類”的機(jī)制下運(yùn)行,因此虛擬機(jī)制的行為和構(gòu)造函數(shù)一樣:只有本地定義(local definitions)被使用——不會(huì)調(diào)用虛擬函數(shù),以免觸及對(duì)象中的(現(xiàn)在已經(jīng)被銷毀的)繼續(xù)類的部分。

  更多的細(xì)節(jié),參見(jiàn)《C++語(yǔ)言的設(shè)計(jì)和演變》13.2.4.2和《C++程序設(shè)計(jì)語(yǔ)言》15.4.3。

  有人暗示,這只是一條實(shí)現(xiàn)時(shí)的人為制造的規(guī)則。不是這樣的。事實(shí)上,要實(shí)現(xiàn)這種不安全的方法倒是非常輕易的:在構(gòu)造函數(shù)中直接調(diào)用虛擬函數(shù),就象調(diào)用其它函數(shù)一樣。但是,這樣就意味著,任何虛擬函數(shù)都無(wú)法編寫了,因?yàn)樗鼈冃枰揽炕惖墓潭ǖ膭?chuàng)建(invariants established by base classes)。這將會(huì)導(dǎo)致一片混亂。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区亚洲人成毛片 | 91麻豆精品国产91久久久无需广告 | 伦一区二区三区中文字幕v亚洲 | 91麻豆精品国产91久久久点播时间 | 精品国产一区二区三区在线观看 | av一道本 | 午夜热门福利 | 九色在线78m | 亚洲最大久久 | 一区在线视频 | 一本到免费视频 | 国产女同玩人妖 | 干一夜综合| tube69xxxxxhd| 色网在线视频 | 激情在线观看视频 | 毛片在线免费观看完整版 | 日韩中文字幕一区二区三区 | 久久视讯| 久久精品视频一区二区 | 极品大长腿啪啪高潮露脸 | 免费在线观看毛片视频 | av免费在线观看免费 | 西川av在线一区二区三区 | 国产一级在线看 | 午夜精品视频在线 | 99riav国产在线观看 | 高清视频91 | 91精品片| 56av国产精品久久久久久久 | 欧美三级欧美成人高清www | 欧美一级高清片在线 | 成年人在线视频观看 | 精品一区二区三区欧美 | 亚洲日本欧美 | 牛牛视频在线 | 国产超碰人人做人人爱 | 色婷婷av一区二区三区久久 | 黄网在线 | 久久艹一区 | 成人一级视频在线观看 |