Dưới đây là mã của tôi, và IDE là DEV C++ Ngôn ngữ lập trình 11Về con trỏ tới hàm thành viên của lớp có nguồn gốc
#include<iostream>
using namespace std;
class A{
public:
int a=15;
};
class B:public A
{
};
int main(){
int A::*ptr=&B::a; //OK
int B::*ptr1=&A::a; //why?
int B::A::*ptr2=&B::a;//why?
int B::A::*ptr3=&A::a; //why?
}
Tôi đã đọc - C++ và tôi biết loại &B::a
là int A::*
, nhưng tôi không hiểu tại sao ba dòng tiếp theo sẽ vượt qua quá trình biên dịch. Và điều kỳ lạ nhất đối với tôi là cú pháp của int B::A::*
, ý nghĩa của việc này là gì? Tôi chỉ là người mới của C/C++
, vì vậy hãy tha thứ cho câu hỏi kỳ lạ của tôi.
@Ron Ahem .. It ** is ** [mcve]. 'ptr' thuộc kiểu' int A :: * ',' ptr2' thuộc kiểu 'int B :: A :: *', v.v. Như bạn có thể thấy: mã được đăng bởi OP [biên dịch tốt] (http://ideone.com/Cz2Bmg), họ chỉ là nhầm lẫn về ** tại sao ** nó biên dịch. –
@ AlgirdasPreidžius True. Tôi đứng sửa. – Ron
Tại sao bạn nghĩ rằng họ không nên vượt qua biên soạn? –