程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 對象-C++多態基類和派生類之間轉換

對象-C++多態基類和派生類之間轉換

編輯:編程綜合問答
C++多態基類和派生類之間轉換
#include <iostream>
#include<iostream>
using namespace std;

class A
{
public:
    void foo()
    {
        printf("1\n");
    }
    virtual void fun()
    {
        printf("2\n");
    }
};
class B : public A
{
public:
    void foo()
    {
        printf("3\n");
    }
    void fun()
    {
        printf("4\n");
    }
    void testB()
    {
        printf("testB\n");
    }
};

int main(int argc, const char * argv[]) {
    A a;
    B *ptr = (B *)&a;
    ptr->foo();
    ptr->fun();
    ptr->testB();

    B bb;
    A *aa = &bb;
    aa->foo();
    aa->fun();

    return 0;
}

A a;
B *ptr = (B *)&a;
ptr->foo();
ptr->fun();
ptr->testB();

派生類的對象B並沒有創建??
為什麼能夠使用,
多態是怎麼調用的

最佳回答:


不能這樣用,只是這樣寫編譯器讓你編譯通過。
強制類型轉換為派生類型,調用虛函數,這個是編譯期間綁定的,所以可以調用。
但是這麼寫其實很危險,不知道會有什麼後果,當試圖讀寫派生類的變量的時候。

C++是一種充滿坑的語言,編譯器檢查很弱,你不能指望它。
好比數組,你明明越界了,也能通過編譯,你覺得編譯器會自動給你加大內存麼?當然不會。

renzhe20092584
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved