基類指標指向派生類物件
基類指標指向派生類物件
3種情況:
- 一般只能呼叫基類的函式
- 呼叫的函式,在基類中函式如果是虛擬函式,呼叫繼承類的函式
- 呼叫的函式,在基類中函式如果只在繼承類中有,報錯
然後來看一組程式碼例項:
#include <iostream>
using namespace std;
class A {
public:
void f() { cout << "A::f()" << endl; }
virtual void g() { cout << "A::g()" << endl; }
};
class B :public A {
public:
void f() { cout << "B::f()" << endl; }
void g() { cout << "B::g()" << endl; }
};
int main() {
A a;
B b;
A*pa = &b;//基類指標指向繼承類
pa->f();//基類中有的只能指向基類
pa->g();//基類中是虛擬函式,只能呼叫繼承類函式
}
結果如下
B::f()
A::g()
相關推薦
基類指標指向派生類物件
基類指標指向派生類物件 3種情況: 一般只能呼叫基類的函式 呼叫的函式,在基類中函式如果是虛擬函式,呼叫繼承類的函式 呼叫的函式,在基類中函式如果只在繼承類中有,報錯 然後來看一組程式碼例項: #include <iostream> usi
C++動態聯編的好處,為什麼要用基類的指標指向派生類的方式來實現重寫
動態聯編的意義:省事 一個derived類物件,要呼叫一個函式,他就會在自己的類中查詢函式名,如果找到了就呼叫自己的; 如果沒找到就到基類找,呼叫基類的函式。(名字查詢優先於型別檢查,找到名字符合的就停下來,不向上一個基類的作用域繼續找)。 class
c++父類指標指向子類物件
c++父類指標指向子類物件 父類子類指標函式呼叫注意事項 1,如果以一個基礎類指標指向一個衍生類物件(派生類物件),那麼經由該指標只能訪問基礎類定義的函式(靜態聯翩) 2,如果以一個衍生類指標指向一個基礎類物件,必須先做強制轉型動作(explicit cast),這種做法很
C++ 基類指標和派生類指標之間的轉換
函式過載、函式隱藏、函式覆蓋 函式過載只會發生在同作用域中(或同一個類中),函式名稱相同,但引數型別或引數個數不同。 函式過載不能通過函式的返回型別來區分,因為在函式返回之前我們並不知道函式的返回型別。 函式隱藏和函式覆蓋只會發生在基類和派生類之間。 函式隱藏是指派
【C++學習筆記】父類指標指向子類物件
虛擬函式的作用主要是實現了多型的機制。簡而言之就是用父型別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。但僅僅可呼叫父類含有的函式,非父類函式不能呼叫。 普通虛擬函式呼叫 假設我們有下面的類層次: #includ
當父類指標指向子類物件時的函式呼叫
class A { public: void FuncA() { printf( "FuncA called\n" ); } virtual void FuncB() { printf( "FuncB called\n" ); } }; cl
關於C++的子類指標指向父類
1,直接用基類指標引用基類物件2,直接用派生類指標引用派生類物件3,用基類指標引用一個派生類物件,由於派生類物件也是基類的物件,所以這種引用是安全的,但是隻能引用基類成員。若試圖通過基類指標引用那些只在派生類中才有的成員,編譯器會報告語法錯誤。(解決該問題的答案是虛擬函式和多型性)4
為什麼基類的指標可以指向派生類物件,但是派生類指標不能指向基類物件
Derive *bp1; Derive dpp; bp1 = &dpp; bp1->show(); Base bpp; bp1 = &bpp; //錯誤 假設有個people類是基類,成員有姓名和身份證號,有個派生類學生student,添加了成員
為什麼基類指標和引用可以指向派生類物件,但是反過來不行?
基類指標和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基類指標和引用可以指向派生類物件,但是無法使用不存在於基類只存在於派生類的元素。(所以我們需要虛擬函式和純虛擬函式) 原因是這樣的:
關於父類引用指向子類物件
以下內容參考https://www.cnblogs.com/ChrisMurphy/p/5054256.html 父類引用指向子類物件指的是: 例如父類Animal,子類Cat,Dog。其中Animal可以是類也可以是介面,Cat和Dog是繼承或實現Animal的子類。 Animal animal =
第13周-任務3-抽象基類Shape及派生類Circle Rectangle和Triangle
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
調整基類成員在派生類中的訪問屬性
一、同名成員 為了在派生類中使用基類的同名成員,必須在該成員名之前加上基類名和作用域識別符號 “ :: ”,格式為:基類名::成員名 派生類可以重新說明與基類成員同名的成員,如果在派生類中定義了與基類成員同名的成員,則稱派生類成員覆蓋了基類的同名成員。 在面向物件程式設計中,
面向物件三大特徵,super關鍵字,以及父類引用指向子類物件。訪問許可權的大小。
一.封裝,反射的時候在詳細補充。 二.繼承 補充:子類的訪問許可權一定要大於等於父類。 訪問許可權的優先順序順序:public(在哪裡都可以訪問)>protected(保護的意思,子類可以訪問,但是子類的許可權要大於父類的許可權,這是首要條件,否者子類依舊訪問不到)
C++_基類成員在派生類中的訪問屬性——總結
首先回顧一下三種成員訪問限定符: public(公用的):既可以被本類中的成員函式所引用,也可以被類的作用域內的其他函式(即類外)引用。 private(私有的):只能被本類中的成員函式引用,類外不能呼叫(友元類除外) protected(受保護的):不能被類外訪問,但可以
多型的理解(父類引用指向子類物件)
多型:要有繼承,方法的重寫,父類引用指向子類物件 ?疑問:Animal cat = new Cat(); //向上轉型。 父類引用指向子類物件,該引用不能再訪問子類新
父類引用指向子類物件屬性值
父類引用指向子類物件指的是: 例如父類Animal,子類Cat,Dog。其中Animal可以是類也可以是介面,Cat和Dog是繼承或實現Animal的子類。 Animal animal = new Cat(); 即宣告的是父類,實際指向的是子類的一個物件。 那這麼使用的優點是什麼,為什麼要這麼
C#父類引用指向子類物件
父類引用指向子類物件指的是: 例如父類Animal,子類Cat,Dog。其中Animal可以是類也可以是介面,Cat和Dog是繼承或實現Animal的子類。 Animal animal = new Cat(); 即宣告的是父類,實際指向的是子類的一個物件。 那這
List list = new ArrayList()為何父類引用指向子類物件(多型)
態:要有繼承,方法的重寫,父類引用指向子類物件 疑問一:父類引用指向子類物件 與指向父類物件 Animal cat = new
父類引用指向子類對象
static 指向 多繼承 反射機制 board oid 簡單明了 信息 繼承關系 父類引用指向子類對象指的是: 例如父類Animal,子類Cat,Dog。其中Animal可以是類也可以是接口,Cat和Dog是繼承或實現Animal的子類。 Animal animal =
多態父類引用指向子類對象時,如何調用子類的獨有方法?
引用 父類引用 post 父類 多態 pos int ins blog 父類:A 子類:Person A a1 = new Person(); if(a1 instanceof Person) { System.out.println("true");