C++之Virtual初探(一)
#include<iostream>
using namespace std;
class A{
public:
virtual ~A(){f();}
virtual void f(){cout<<"This is A virtual"<<endl;}
void g(){cout<<"This is A no-virtual"<<endl;}
};
class B:public A{
public:
~B(){f();}
virtual void f(){cout<<"This is B virtual"<<endl;}
void g(){cout<<"This is B no-virtual"<<endl;}
};
int main(){
//如果是virtual方法的話,和Java中多型現象一樣
A* p = new B;
p->f();
A* q = new A;
q->f();
//如果不是virtual方法,那麼只看引用是什麼型別
A* w = new A;
w->g();
A* x = new B;
x->g();
cout<<"====delete all object!==="<<endl;
delete p;
delete q;
delete w;
delete x;
return 0;
}
再看一個例子:
#include <iostream>
using namespace std;
class Base{
public:
Base(int j) : i(j) {}
virtual ~Base() {}
void func1(){
cout<<"Base func1"<<endl;
i *= 10;
//但是Base的func2是virtual,所以要看真正的物件是什麼型別
//如果是Child型別物件,那麼就應該呼叫Child的func2函式
func2();
}
int getValue(){
return i;
}
protected:
virtual void func2(){
i++;
cout<<"Base func2"<<endl;
}
protected:
int i;
};
class Child : public Base {
public:
Child(int j) : Base(j) {}
void func1(){
cout<<"Child func1"<<endl;
i *= 100;
func2();
}
protected:
void func2(){
i += 2;
cout<<"Child func2"<<endl;
}
};
int main(void){
Base *pb = new Child(1);
pb->func1(); //func1不是虛擬函式,所以這裡引用是Base型別,就呼叫Base的func1函式
cout<<pb->getValue()<<endl;
delete pb;
return 0;
}
相關文章
- C++ Virtual函式C++函式
- C++ Virtual詳解C++
- C++繼承三之純虛擬函式pure virtual functionC++繼承函式Function
- Docker系列開篇之Virtual Machine VS Container(一)DockerMacAI
- C++中的虛擬函式(virtual function)C++函式Function
- 【校園招聘】一道筆試題看c++中virtual覆蓋筆試C++
- C++ 類(物件導向初探)C++物件
- Flask初探之WSGIFlask
- 一起理解 Virtual DOM
- 【C++基礎】純虛擬函式 - pure virtual functionC++函式Function
- Django初探一Django
- Docker初探之Windows篇DockerWindows
- 初探STL容器之Vector
- 搞事情之 Vapor 初探Vapor
- Jetpack 之 Navigation 初探JetpackNavigation
- Javascript 之 Event Looooooop 初探JavaScriptOOP
- 初探Java安全之JavaAgentJava
- Java命令之javap初探Java
- webpack練手專案之easySlide(一):初探webpackWebIDE
- 初探python之做一個簡單小爬蟲Python爬蟲
- web.py初探之第一個頁面hello wordWeb
- Unity 之渲染管線初探Unity
- 跟我一起學習C++ 之 初識C++C++
- C/C++與Matlab混合程式設計初探C++Matlab程式設計
- C++入門解惑(2)——初探指標(上) (轉)C++指標
- C++入門解惑(3)——初探指標(下) (轉)C++指標
- Azure Virtual Desktop(一)建立配置管理
- Docker初探之常用命令Docker
- 初探webpack之編寫loaderWeb
- netty系列之:netty初探Netty
- Golang通脈之併發初探Golang
- 區塊鏈之以太坊初探區塊鏈
- Android Studio初探之previewAndroidView
- C++繼承一之公有繼承C++繼承
- Active Data Guard初探(一)
- 初探Oracle Golden Gate(一)OracleGo
- QT declarative UI 初探(一)QTUI
- 初探data pump export(一)Export