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++ 虛擬函式表解析C++函式
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- C++多型之虛擬函式C++多型函式
- 深入C++成員函式及虛擬函式表C++函式
- C++虛擬函式學習總結C++函式
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- C++之類解構函式為什麼是虛擬函式C++函式
- C++純虛擬函式簡介及區別C++函式
- c++虛擬函式實現計算表示式子C++函式
- [Lang] 虛擬函式函式
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 詳解C++中的多型和虛擬函式C++多型函式
- 虛擬函式表-C++多型的實現原理函式C++多型
- C++物件導向總結——虛指標與虛擬函式表C++物件指標函式
- C++(虛擬函式實現多型基本原理)C++函式多型
- 虛擬函式與多型函式多型
- 虛擬函式的呼叫原理函式
- 虛擬函式的實現原理函式
- 深度解讀《深度探索C++物件模型》之C++虛擬函式實現分析(二)C++物件模型函式
- 深度解讀《深度探索C++物件模型》之C++虛擬函式實現分析(一)C++物件模型函式
- 深度解讀《深度探索C++物件模型》之C++虛擬函式實現分析(三)C++物件模型函式
- C++單繼承、多繼承情況下的虛擬函式表分析C++繼承函式
- 抽象基類和純虛擬函式抽象函式
- 內聯(inline)函式與虛擬函式(virtual)的討論inline函式
- <<從0到1學C++>> 第7篇 多型性和虛擬函式C++多型函式
- C++ 虛解構函式簡單測試C++函式
- 基類指標、虛純虛擬函式、多型性、虛析構指標函式多型
- 虛擬函式的記憶體佈局(上)函式記憶體
- 關於虛擬函式的一些理解函式
- Java常見知識點彙總(④)——虛擬函式、抽象函式、抽象類、介面Java函式抽象
- C++函式C++函式
- setV:一個管理 Python 虛擬環境的 Bash 函式Python函式
- c++ Beep函式C++函式