Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Tham chiếu biến trong lớp thừa kế

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    0

    Mặc định Tham chiếu biến trong lớp thừa kế

    Các huynh cho đệ hỏi tí nhé. Đệ muốn sử dụng thuộc tính a trong class A để phục vụ cho class B. Đệ đã sử dụng kế thừa lớp nhưng ko hiểu sao, giá trị của a trong lớp B là 5 chứ ko phải là 10, mặc dù đã cố gắng sử dụng 3 cách khác nhau:
    Mong mỏi chờ tin của các huynh.

    PHP Code:
    #include<conio.h>
    #include<iostream.h>
    #include<string.h>
    class A
    {
    public:
        
    int a;
        
    A()
        {
            
    a=5;
        }
        
    void set()
        {
            
    a=10;
        }
        
    void out1()
        {
            
    cout<<"a in class A = "<<a<<"\n";
        }
        
    };
    class 
    B:public A
    {
    public:
        
    int *b;
        
    void out2()
        {
            
    b=&a;
            
    cout<<"a in class B = "<<a<<" or "<<A::a<<" or "<<*b<<"\n";
        }
    };
    int main()
    {
        
    A aa;
        
    aa.set();
        
    aa.out1();
        
    B bb;
        
    bb.out2();    
        return 
    0;

    Đã được chỉnh sửa lần cuối bởi trafficwarevn : 09-12-2008 lúc 04:35 AM.

  2. #2
    Ngày gia nhập
    09 2008
    Bài viết
    28

    Trích dẫn Nguyên bản được gửi bởi trafficwarevn Xem bài viết
    Các huynh cho đệ hỏi tí nhé. Đệ muốn sử dụng thuộc tính a trong class A để phục vụ cho class B. Đệ đã sử dụng kế thừa lớp nhưng ko hiểu sao, giá trị của a trong lớp B là 5 chứ ko phải là 10, mặc dù đã cố gắng sử dụng 3 cách khác nhau:
    Mong mỏi chờ tin của các huynh.

    PHP Code:
    #include<conio.h>
    #include<iostream.h>
    #include<string.h>
    class A
    {
    public:
        
    int a;
        
    A()
        {
            
    a=5;
        }
        
    void set()
        {
            
    a=10;
        }
        
    void out1()
        {
            
    cout<<"a in class A = "<<a<<"\n";
        }
        
    };
    class 
    B:public A
    {
    public:
        
    int *b;
        
    void out2()
        {
            
    b=&a;
            
    cout<<"a in class B = "<<a<<" or "<<A::a<<" or "<<*b<<"\n";
        }
    };
    int main()
    {
        
    A aa;
        
    aa.set();
        
    aa.out1();
        
    B bb;
        
    bb.out2();    
        return 
    0;

    Đơn giản là vì:

    Khi bạn khai báo B bb, thì bb không có kế thừa "aa" như bạn nghĩ mà nó kế thừa lớp A mà thôi. Mà lớp A thì chỉ có (a=5) khi mới hình thành.

    Để có được giá trị là 10, bạn phải gọi hàm "set()" trong lớp con bb:

    bb.set();

    Và khi in ra bạn sẽ thấy kết quả là 10:

    bb.out2();

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    0

    Cảm ơn huynh thichgame nhiều lắm, quả đúng như huynh nói.
    Lúc nào có gì bí , đệ mong các huynh giúp đỡ tiếp, vì là dân ngoại đạo tự học C++ mà.

Các đề tài tương tự

  1. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  2. Thuộc tính khóa ngoài( tham chiếu) biến mất khi biến đổi từ file XML sang DataTable
    Gửi bởi itmanhieu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-08-2011, 08:02 PM
  3. Dùng biến tham chiếu trong khai báo hàm ở ngôn ngữ C#?
    Gửi bởi egr trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 19-05-2010, 11:09 PM
  4. hỏi về ref trong tham chiếu biến
    Gửi bởi xadieu trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-04-2008, 10:52 PM
  5. Biến tham chiếu trong c#
    Gửi bởi tienlbhoc trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 25-01-2008, 10:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn