0 Câu hỏi: làm thế nào chúng ta có thể truy cập chức năng của lớp dẫn xuất khi con trỏ lớp dẫn xuất là null [trùng lặp]

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM
    

Câu hỏi này đã có câu trả lời tại đây:

    

Tôi tương đối mới với c ++ và cần trợ giúp để hiểu hành vi của chương trình sau. ai đó có thể vui lòng giúp tôi hiểu tại sao gọi cho funOne hoạt động không, khi ptr là null? và tại sao nó không hoạt động trong việc gọi funTwo? trong chương trình sau:

Liên kết IdeOne: https://ideone.com/PARm89

#include <iostream>
using namespace std;

class Base
{
    public:
        virtual ~Base() {}
};

class Derived: public Base
{
        int i;
    public:
        void funOne()
        {
            cout << "inside funOne()"  << endl ;
        }
        void funTwo()
        {
            cout << "inside funTwo()" << i << endl ;
        }
};

int main()
{
    Base* bptr = new Base;
    Derived* dptr = dynamic_cast<Derived*>(bptr);

    cout << dptr << endl;
    cout << bptr << endl;

    dptr->funOne(); // why this works?
    // dptr->funTwo(); // -> why this does NOT work? it throws exception

    int temp;
    cin >> temp;

    return 0;
}
    
0
  1. Bạn đã bước vào thế giới tuyệt vời của hành vi Không xác định. Một trong những tác động khó chịu nhất của hành vi không xác định là hành vi không được xác định, do đó mã có thể trông giống như nó hoạt động.
    2019-05-08 05: 31: 21Z
  2. Thực tế những gì có thể xảy ra là funOne không sử dụng bất kỳ thành viên nào của Derived vì vậy thực tế là trường hợp không hợp lệ không được chú ý. Trong khi đó, trong funTwo, i là bắt buộc, do đó, trường hợp không hợp lệ được phơi bày.
    2019-05-08 05: 34: 01Z
  3. @ user4581602 - cảm ơn bạn
    2019-05-08 06: 17: 53Z
0 Câu trả lời                              0                         
nguồn đặt đây