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

Đề tài: Inheritance - virtual/pure virtual

  1. #1
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Mặc định Inheritance - virtual/pure virtual

    Mình có bài tập Ninja - Monster

    1.

    Base class là enemy, có protected int attackpower; 3 functions là attack(); setattackpower và print.

    Attack() in ra....

    Ninja: "Ninja chop!"
    Monster: "Monster.."

    print in ra
    "I'm a ninja" và "I'm a monster."

    print là pure virtual function.

    dùng operator overload >> với <<

    Cout<< ninja.

    cin>>monster


    Code mình như sau.

    header header.h
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. class Enemy
    5. {
    6. protected:
    7.     int attackpower;
    8. public:
    9.     Enemy();
    10.     Enemy(int a);
    11.     ostream &operator<<(Enemy& e);
    12.     istream &operator>>(Enemy& e);
    13.  
    14.     virtual void attack(int){}
    15.     void  setattackpower(int);
    16.     virtual void print()=0;
    17. };
    18.  
    19. class Ninja: public Enemy
    20. {
    21. public:
    22.    
    23.  
    24.     void attack()
    25. {
    26.     cout<<"Ninja Chop!"<<endl;
    27. }
    28.     void print()
    29.     {
    30.         cout<<"I'm ninja "<< attackpower << endl;
    31.         attack();
    32.     }
    33. };
    34.  
    35. class Monster:public Enemy
    36. {
    37. public:
    38.    
    39.    
    40.    
    41.     void attack()
    42. {
    43.     cout<<"Monster Smash!"<<endl;
    44. }
    45.     void print()
    46.     {
    47.         cout<<"I'm monster "<<attackpower<<endl;
    48.         attack();
    49.        
    50.     }
    51.  
    52. };


    Main.cpp

    C++ Code:
    1. #include <iostream>
    2. #include "header.h"
    3. using namespace std;
    4.  
    5. void Enemy::setattackpower(int a)
    6. {
    7.     attackpower = a;
    8. }
    9.  
    10. Enemy::Enemy()
    11. {
    12. }
    13.  
    14. Enemy::Enemy(int a)
    15. {
    16.     a=attackpower;
    17. }
    18.  
    19.  
    20. ostream & operator<<( ostream &out,Enemy &e )
    21. {
    22.    e.print();
    23.    return out;
    24. }
    25.  
    26. istream & operator>>( istream &is, Enemy &e )
    27. {
    28.        
    29.         e.setattackpower(15);
    30.         return is;
    31.     }
    32.  
    33.  
    34. void main()
    35. {
    36.    
    37.  
    38.     Enemy *enemies = new Ninja;
    39.     Enemy *enemies2= new Monster;
    40.     enemies->setattackpower(150);
    41.     cout << *enemies << endl;
    42.  
    43.     cin>> *enemies2;
    44.     cout<< *enemies2<<endl;
    45.    
    46.         system("pause");
    47.  
    48. }

    Không biết làm vậy đúng ko. Mấy bạn giúp mình nhé.

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    136

    C++ Code:
    1. ostream &operator<<(Enemy& e);
    2. istream &operator>>(Enemy& e);
    Đối với các toán tử >> hay << bạn phải quá tải thông qua từ khóa friend (hàm bạn) như vậy thì bạn mới cần phải

    C++ Code:
    1. friend ostream &operator<<(ostream &out, Enemy& e);
    2. friend istream &operator>>(istream &in, Enemy& e);
    nên các để các tham số hình thức ở dạng hằng nếu bạn không muốn thay đổi các biến member variable của lớp
    C++ Code:
    1. friend ostream &operator<<(ostream &out, const Enemy& e);//nên đặt const ở đây
    2. friend istream &operator>>(istream &in, Enemy& e);//dùng hằng ở đây sẽ không nhập được dữ liệu
    Chi tiết hơn bạn có thể xem tại đây http://diendan.congdongcviet.com/sho...d.php?t=122239
    hoặc chi tiết hơn tại http://www.learncpp.com/cpp-tutorial...-io-operators/
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

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

  1. C++ Tutorial Virtual table trong việc dynamic binding phương thức virtual
    Gửi bởi luc13aka47 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2016, 08:56 PM
  2. Lỗi pure virtual function call -> nguyên nhân là do hàm hủy tự động gọi @@
    Gửi bởi vipzero trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 14
    Bài viết cuối: 16-12-2012, 08:08 AM
  3. Sự khác biệt giữa new, virtual và override ?
    Gửi bởi NT_OnlyLove trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 03-09-2009, 10:48 PM
  4. Sửa lỗi khi thừa kế phương thức virtual
    Gửi bởi ghost_IT trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 12
    Bài viết cuối: 05-05-2009, 11:26 PM
  5. Increase your Virtual RAM
    Gửi bởi Xcross87 trong diễn đàn Thắc mắc chung
    Trả lời: 5
    Bài viết cuối: 21-06-2007, 09:36 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