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

Đề tài: Giúp đỡ về mảng con trỏ khi cài đặt tính đa hình

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    Mặc định Giúp đỡ về mảng con trỏ khi cài đặt tính đa hình

    Giải sử mình có 2 lớp được cài đặt như sau
    C Code:
    1. // tstt.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. class Point2D
    6. {
    7.     int x, y;
    8. public:
    9.     Point2D(int _x=0, int _y=0)
    10.     {
    11.         x = _x;
    12.         y = _y;
    13.     }
    14.     void Display()
    15.     {
    16.         printf("%d %d %d\n",x,y,GetZ());
    17.     }
    18.     virtual int GetZ()
    19.     {
    20.         return 0;
    21.     }
    22. };
    23.  
    24. class Point3D:public Point2D
    25. {
    26.     int z;
    27. public:
    28.     Point3D(int _x=0, int _y=0, int _z=0):Point2D(_x,_y)
    29.     {
    30.         z = _z;
    31.     }
    32.     int GetZ()
    33.     {
    34.         return z;
    35.     };
    36. };
    37.  
    38. int main(int argc, char* argv[])
    39. {
    40.     Point2D a(1,2);
    41.     Point3D b(4,5,6);
    42.     a.Display();
    43.     b.Display();
    44.  
    45.     Point2D *ptr;
    46.     ptr = &Point3D(7,8,9);
    47.     ptr->Display();
    48.     return 0;
    49. }

    ở trên mình chỉ tạo 1 được con trỏ của lớp cơ sở Point2D trỏ đến đối tượng lớp dẫn xuất Point3D, mình đã thử tạo 1 mảng con trỏ của lớp cơ sở trỏ đến các đối tượng của lớp dẫn xuất nhưng ko hiểu sao ko tạo được. Tìm trong sách cũng ko thấy nên mạo muội lên đây hỏi các bạn
    Đã được chỉnh sửa lần cuối bởi halohcm : 10-12-2008 lúc 08:46 PM.

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    không có bạn nào giúp mình hay sao

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Nó không được là sao thế bạn. Nói rõ hơn tý nào.???

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    mình khai báo như sau
    C Code:
    1. // tstt.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. class Point2D
    6. {
    7.     int x, y;
    8. public:
    9.     Point2D(int _x=0, int _y=0)
    10.     {
    11.         x = _x;
    12.         y = _y;
    13.     }
    14.     void Display()
    15.     {
    16.         printf("%d %d %d\n",x,y,GetZ());
    17.     }
    18.     virtual int GetZ()
    19.     {
    20.         return 0;
    21.     }
    22. };
    23.  
    24. class Point3D:public Point2D
    25. {
    26.     int z;
    27. public:
    28.     Point3D(int _x=0, int _y=0, int _z=0):Point2D(_x,_y)
    29.     {
    30.         z = _z;
    31.     }
    32.     int GetZ()
    33.     {
    34.         return z;
    35.     };
    36. };
    37.  
    38. int main(int argc, char* argv[])
    39. {
    40.     int i;
    41.     Point2D *ptr = new Point3D[5];
    42.  
    43.     for (i=0; i<5; i++)
    44.     {
    45.         (ptr+i) = &Point3D(i,8,9);
    46.         (ptr+i)->Display();
    47.     }
    48.  
    49.     return 0;
    50. }
    khi chạy thì bị lỗi error C2106: '=' : left operand must be l-value

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Left operand nó có phải là l-value đâu mà cậu dám dùng assignment operator ?
    - Dùng pointer cho pointer và dùng new thì mới khởi tạo kiểu constructor được. Dù sao cách kế thừa của cậu như trên nhìn kì cục sao đó, tui cho cậu 1 ví dụ :
    Java Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5.  
    6. class Point {
    7.  
    8. protected :
    9.     int x, y, z;
    10.  
    11. public :
    12.  
    13.     Point( int x = 0, int y = 0, int z = 0 ):x( x ), y( y ), z( z ) {
    14.     }
    15.  
    16.     virtual ~Point() {
    17.     }
    18.  
    19.     virtual ostream& show( ostream& out ) const = 0;
    20. };
    21.  
    22. class Point2D : public Point {
    23.  
    24. public :
    25.  
    26.     Point2D( int x, int y ):Point( x, y ) {
    27.     }
    28.  
    29.     virtual ostream& show( ostream& out ) const {
    30.         return out << x << "," << y;
    31.     }
    32. };
    33.  
    34. class Point3D : public Point {
    35.  
    36. public :
    37.  
    38.     Point3D( int x, int y, int z ):Point( x, y, z ) {
    39.     }
    40.  
    41.     virtual ostream& show( ostream& out ) const {
    42.         return out << x << "," << y << "," << z;
    43.     }
    44. };
    45.  
    46. ostream& operator <<( ostream& out, const Point* o ) {
    47.     return o->show( out );
    48. }
    49.  
    50. int main() {
    51.     const int MAX_POINTS = 3;
    52.     Point** points = new Point*[ MAX_POINTS ];
    53.  
    54.     for( int i = 0; i < MAX_POINTS; ++i ) {
    55.         points[ i ] = new Point3D( i, i + 1, i + 2 );
    56.         std::cout << points[ i ] << endl;
    57.     }
    58.  
    59.     for( int del = 0; del < MAX_POINTS; ++del ) {
    60.         delete points[ del ];
    61.     }
    62.  
    63.     return 0;
    64. }

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

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