C++ 虛擬函式
/*
* Brass.h
*
* Created on: 2014-3-22
* Author: Administrator
*/
#ifndef BRASS_H_
#define BRASS_H_
class Brass {
public:
Brass();
virtual void showVirtual();
void show();
virtual ~Brass();
};
class BrassPlus: public Brass {
public:
virtual void showVirtual();
virtual ~BrassPlus();
void showPlus();
void show();
};
#endif /* BRASS_H_ */
/*
* Brass.cpp
*
* Created on: 2014-3-22
* Author: Administrator
*/
#include "Brass.h"
#include <iostream>
using namespace std;
Brass::Brass() {
// TODO Auto-generated constructor stub
}
Brass::~Brass() {
cout << "~Brass" << endl;
}
void Brass::showVirtual() {
cout << "Brass showVirtual" << endl;
}
void BrassPlus::showVirtual() {
cout << "BrassPlus showVirtual" << endl;
}
void Brass::show() {
cout << "Brass show" << endl;
}
void BrassPlus::show() {
cout << "BrassPlus show" << endl;
}
void BrassPlus::showPlus() {
cout << "BrassPlus showPlus" << endl;
}
BrassPlus::~BrassPlus() {
cout << "~BrassPlus" << endl;
}
#include "Brass.h"
int main() {
BrassPlus bp1;
Brass *b2 = &bp1;
Brass b3 = bp1;
Brass& b4 = bp1;
bp1.showVirtual();
b2->showVirtual();
b3.showVirtual();
b4.showVirtual();
// BrassPlus showVirtual
// BrassPlus showVirtual
// Brass showVirtual
// BrassPlus showVirtual
bp1.show();
b2->show();
b3.show();
b4.show();
// BrassPlus show
// Brass show
// Brass show
// Brass show
return 0; //~Brass ~BrassPlus ~Brass
}
總結:
子類輸值給父類 都是父類的方法
使用虛擬函式,指標引用將呼叫子類的方法,不使用虛擬函式呼叫的父尖的方法
解構函式的呼叫,b3先清除 解構函式呼叫, b1清除呼叫子類的解構函式,因採用虛擬函式父類的解構函式自動呼叫(不要再子解構函式中顯性呼叫,)
java中子類輸值給父類,只是傳引用地址,所以呼叫的還是子類的方法
Brass b1;
BrassPlus& bp1 = (BrassPlus &) b1;
bp1.show();
bp1.showPlus();
BrassPlus show
BrassPlus showPlus
~Brass
總結2:
父類強制轉換成子類,要用引用轉換
不明白為什麼呼叫的是子類的方法
相關文章
- C++虛擬函式C++函式
- C++中抽象類、虛擬函式和純虛擬函式C++抽象函式
- C++中的虛擬函式與虛擬函式表 (轉)C++函式
- c++虛擬函式表C++函式
- C++虛擬函式bugC++函式
- 【C++筆記】虛擬函式(從虛擬函式表來解析)C++筆記函式
- 【C++筆記】虛擬函式(從虛擬函式概念來解析)C++筆記函式
- C++ 介面(純虛擬函式)C++函式
- C++ 中的虛擬函式C++函式
- C++ 虛擬函式表剖析C++函式
- C++ 虛擬函式表解析C++函式
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- C++多型(上)——虛擬函式、虛表C++多型函式
- C++多型之虛擬函式C++多型函式
- C++中虛擬函式的作用C++函式
- C++虛擬函式解析(轉載)C++函式
- 深入C++成員函式及虛擬函式表C++函式
- C++箴言:避免解構函式呼叫虛擬函式C++箴言函式
- C++ 虛擬函式和虛繼承淺析C++函式繼承
- C++虛擬函式學習總結C++函式
- C++繼承二之虛擬函式C++繼承函式
- C++ 繼承、多型、虛擬函式C++繼承多型函式
- C++中的虛擬函式(virtual function)C++函式Function
- C++:純虛擬函式與抽象類C++函式抽象
- C++ Daily 《3》----建構函式可否是虛擬函式C++AI函式
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 虛擬函式函式
- C/C++—— C++中建構函式不能是虛擬函式的原因分析C++函式
- C++函式中那些不可以被宣告為虛擬函式的函式C++函式
- C++之類解構函式為什麼是虛擬函式C++函式
- [Lang] 虛擬函式函式
- C++純虛擬函式簡介及區別C++函式
- c++虛擬函式實現計算表示式子C++函式
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- C++虛擬函式與多型實戰 (轉)C++函式多型
- 【虛擬函式】C++中虛擬函式的作用是什麼?它應該怎麼用呢?[轉]函式C++
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承