C++ 虚函数
2014-03-22 14:44
363 查看
/* * 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++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
- c++ 多态 虚函数 析构函数 抽象类(转)
- C++ - 类的虚函数\虚继承所占的空间
- c++ 虚函数 工作机制 原理( virtual function )
- C++中的虚函数(virtual function)
- C++虚函数与虚函数表 转帖
- C++ 虚函数和纯虚函数总结
- JAVA与C++对比 --– 虚函数、抽象函数、抽象类、接口
- c++ 抽象基类、虚函数、纯虚函数 java抽象类、接口、android生命周期方法异同
- C++中不能声明为虚函数的有哪些函数
- C++的精髓——虚函数
- C++ 虚函数与纯虚函数
- C++中的虚函数、纯虚函数
- C++的虚基类,抽象类,虚函数,纯虚函数,virtual
- c++ 虚函数 待完成
- C++析构函数为什么要为虚函数
- 虚函数、虚继承——C++
- C++ 虚函数-多态的执行
- 【C/C++学习】之八、虚函数与纯虚函数