Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: xem giùm mình code bài về lớp kế thừa

  1. #1
    Ngày gia nhập
    12 2007
    Nơi ở
    giữa thiên đường và địa ngục
    Bài viết
    91

    Mặc định xem giùm mình code bài về lớp kế thừa

    Chjp có code này mà không biết sai ở đâu nhờ mọi người chỉ giùm:
    dề ra: xây dựng 1 lớp mydate gồm các thành phân
    các thuộc tính mô tả ngày,tháng,năm
    hàm thiết lập 3 tham số lấy giá trị ngầm đinh là 1
    hàm hiển thị thông tin ngày,tháng ,năm
    định nghĩa toán tử > để so sánh 2 đối tượng mydate
    xây dựng 1 lớp person được kế thừa từ lớp mydate và bổ sung các thành phần
    name:tên,là 1 xâu không quá 30 kí tự
    phone:số điẹn thoại
    add:địa chỉ,là xâu không quá 40 kí tự
    hàm thiết lập 6 tham số gồm:ngày,tháng,năm sinh,dịa chỉ,điện thoại
    hàm in1 để in thông tin ra màn hình

    viết chương trình khai báo mảng 5 con trỏ đối tượng kiểu person,nhập dữ liệu vào để tạo 5 đối tượng.gọi các hàm thành phần in1() của lớp person thông qua các con trỏ này để in dữ liệu ra màn hình

    code của mình đây

    Code:
    include<iostream.h>
     #include<conio.h>
     #include<string.h>
      class mydate
     {
      public:
       int ng,t,n;
       mydate()
        {
        ng=1;
         t=1;
         n=1;
         }
      mydate(int ng1,int t1,int n1)
       {
       ng=ng1;
       t=t1;
       n=n1;
       }
      void in()
         {
         cout<<ng<<"-"<<t<<"-"<<n;
         }
      class person:public mydate
         {
       public:
        char name[30],add[40];
        int phone;
        person(int dt,char *ten,char *dc,int ng,int t,int n):mydate(ng,t,n)
         {
         phone=dt;
         strcpy(add,dc);
         strcpy(name,ten);
        }
        void in1()
        {
         cout<<name<<"-"<<add<<"-"<<phone;
         mydate::in();
        }
    
         };
       void main()
       {
           int ng,t,n,phone;
           char add[40],name[30];
           person *a[5];
            for(int i=0;i<5;i++)
            {
          cout<<"nhap ten";
          gets(name);
          cout<<"nhap so DT";
          cin>>phone;
          cout<<"nhap ngay";
          cin>>ng;
          cout<<"nhap thang";
          cin>>t;
          cout<<"nhap nam";
          cin>>n;
          a[i]->in1();
           }
           getch();
    
        }

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

    Bạn viết lung tung quá, lỗi cú pháp rất nhiều, mà cái này thì đâu có gì phải kế thừa nhỉ. Bạn chịu khó đọc kĩ phần lý thuyết, không cần chạy nhanh như vậy, nhìn vào cú pháp thấy bạn viết Class còn rất rối, nếu bạn viết mà không biết mình viết cái gì, thì có học tới rồi cũng phải quay lại học lại. Mà làm vậy chỉ tốn thời gian thôi. Học chậm thôi, nhưng học tới đâu thì nắm chắc tới đó.
    Bài này cái lớp Date của bạn, nó chỉ có dữ liệu, và 1 hàm thành viên là in ra kết quả, vậy ta chỉ cần tạo 1 đối tượng của lớp Date là dữ liệu của lớp Person là đủ, như vậy nè :
    PHP Code:
    class Person {

    public :
      
    Person();
      
    /*Constructor*/
      
    Person(const char *aName, const char *anAdresss, const Date &aDateint number);
      
    void ReadInputFromUser();
      
    void PrintPersonalInformation() const;


    private :
        
    char name[20];
        
    char address[40];
        
    int phone_no;
        
    Date register_day//Chỗ này đây 
    Đây mình làm lại hết, bạn coi đó, đọc lại, rồi tự viết 1 cái tương tự sẽ hiểu rõ hơn :

    Date.h
    PHP Code:
    class Date {

    public :
      
    /*Thằng này làm constructor để dữ cho dữ liệu ở 1 trạng thái xác định*/
      
    Date(int 1int 1int 1900);
       
    /*Hàm in ra kết quả, cho nên nó không thay đổi dữ liệu, 
          nên cho nó là "const"*/
      
    void print() const;
      
    void enter();       
     
    private :
      
    /*3 thằng này là hàm kiểm tra dữ liệu có phi lý không, nó không được gọi bên ngoài class Person này, cho nó vào private luôn, chỉ là utility function thôi*/
      
    int IsDayValid(int value);
      
    int IsMonthValid(int value);
      
    int IsYearValid(int value);

      
    int day;
      
    int month;
      
    int year;
    }; 
    Date.cpp
    PHP Code:
    Date::Date(int dyint mmint yr){

      
    month IsMonthValid(mm);
      
    day IsDayValid(dy);
      
    year IsYearValid(yr);
    }

    int Date::IsDayValid(int dy){
      
    /*Thằng này khai báo static để nó khỏi gọi đi gọi lại mỗi lần check, 
         nó sẽ tồn tại cho đến khi main kết thúc*/
      /*Cái này kiểm tra nó có vượt quá ngày của tháng đó không*/
      
    static const int days_per_month[12] =
      {
    312831303130313130313031};  
      
      if(
    dy && dy <= days_per_month[month]){
        return 
    dy;
      }
      
    /*Kiểm tra năm nhuần*/
      
    if( (month == && dy == 29) && (year 400) == ||
          ((
    year 4) == 0) && ((year 100) != 0) ){
        return 
    dy;
      }
      else{
        return 
    1; /Nếu dữ liệu năm phi lýtrả nó về 1*/
      }
    }

    /*Tương tự như check year*/
    int Date::IsMonthValid(int mm){

      if(
    mm && mm <= 12) return mm;
      else                   return 
    1;
    }


    int Date::IsYearValid(int yr){
      
      if(
    yr 0) return yr;
      else       return 
    1;
    }
    /*Kết thúc cám dụng cụ*/

    /*Hàm thành viên in ra kết quả*/
    void Date::print() const{

      
    cout << day << '/' << month << '/' << year;
    }

    /*Hàm này nhập dữ liệu vào, đồng thời kiểm tra coi có nhập sai logic không*/
    void Date::enter(){
      
    cout << "Your registerday\n";
      
    cout << "Day : \n";    cin >> day;
      
    day IsDayValid(day);
      
      
    cout << "Month : \n";  cin >> month;
      
    month IsMonthValid(month);

      
    cout << "Year : \n";   cin >> year;
      
    year IsYearValid(year);

    Bây h tới class Person

    Person.h
    PHP Code:
    class Person {

    public :
     
    /*thằng này default constructor, để tạo 1 đối tượng mà mình có thể input
        vào từ bàn phím*/
      
    Person();

      
    /*Constructor này để ở main ví dụ mình có thể khai báo 
        Person B("Ronaldo", "278/CMT8 P.15 / Q.10", aDay, "8-234-198"); thì nó
        vẫn hiểu, cái này không phải copy constructor đâu nha*/
         
    Person(const char *aName, const char *anAdresss, const Date &aDate, const char *aPhone);

      
    /*2 thằng hàm thành viên*/
      
    void ReadInputFromUser();
      
    void PrintPersonalInformation() const;


    private :
      
    char name[20];
      
    char address[20];
      
    char phone_no[10];
      
    Date register_day/* Dữ liệu của nó có 1 đối tượng của lớp Date*/

      /*Tương tự thằng Date, nó cũng có 3 thằng để kiểm tra dữ liệu*/
      
    void IsNameValid(const char *your_name);
      
    void IsAddressValid(const char *your_address);
      
    void IsPhoneValid(const char *your_phone_number);
    }; 
    Person.cpp
    PHP Code:
    /*Default constructor*/
    Person::Person(){

      
    strcpy(name,"-");
      
    strcpy(address,"-");
      
    strcpy(phone_no,"-");
      
      
    register_day;
    }

    Person::Person(const char *aName, const char *anAddress, const Date &aDate, const charaPhone)
     
    /*Chỗ này sử dụng "bộ khởi tạo thành viên" bằng toán tử ":", để khởi tạo
      cho thằng "register_day", gọi như vậy thì thằng copy constructor của lớp   Date sẽ được gọi, cái này gọi là 
      default copy constructor mặc định của lớp Date mà complier C++ cung 
      cấp ngầm cho nó*/
      
    register_day(aDate) {
      
      
    IsNameValid(aName);
      
    IsAddressValid(anAddress);
      
    IsPhoneValid(aPhone);
    }

    /*3 thằng hàm công cụ, kiểm tra xem độ dài nhập vào có quá
      khai báo cho phép không, nếu có thì đặt nó lại bằng giới hạn cho phép
      sau đó copy nó vào dữ liệu của mình là xong */
    void Person::IsNameValid(const char *your_name){

      
    int length_of_name strlen(your_name);
      
    length_of_name = (length_of_name 20 length_of_name 24);
      
    strncpy(nameyour_namelength_of_name);
      
    name[length_of_name] = '\0'/*Kí tự kết thúc chuỗi*/
    }

    void Person::IsAddressValid(const char *your_address){

      
    int length_of_address strlen(your_address);
      
    length_of_address = (length_of_address 40 length_of_address 40);
      
    strncpy(addressyour_addresslength_of_address);
      
    address[length_of_address] = '\0';
    }

    void Person::IsPhoneValid(const char *your_phone_number){

      
    int length_of_phone strlen(your_phone_number);
      
    length_of_phone = (length_of_phone 10 length_of_phone 10);
      
    strncpy(phone_noyour_phone_numberlength_of_phone);
      
    phone_no[length_of_phone] = '\0';
    }

    /*2 thằng hàm thành viên, bạn dùng gets, còn mình dùng cin.getline cho 
      nó rõ ràng giới hạn kích thước dữ liệu thôi*/
    void Person::ReadInputFromUser(){
        
      
    cout << "What's your name :\n";
      
    cin.getline(name20);
      
      
    cout << "Where do you live :\n";
      
    cin.getline(address40);

      
    cout << "What's your phone number :\n";
      
    cin.getline(phone_no10);
      
      
    register_day.enter();/*Chỗ này nó gọi hàm thành viên của lớp Date*/
      
    cout << "\n----------------------------\n";
      
    cout << "\n-Data entered successfully!-\n";
    }
      
    void Person::PrintPersonalInformation() const {

      
    cout << "\n----------------------------\n";
      
    cout << "Name : " << name << '\n';
      
    cout << "Address : " << address << '\n';
      
    cout << "Phone : " << phone_no << '\n';
      
    register_day.print(); /*Chỗ này cũng gọi hàm thành viên của lớp Date*/


    main.cpp
    PHP Code:

    int main
    (){

      
    Person A;
      
    A.ReadInputFromUser();
      
    A.PrintPersonalInformation();

      
      
    Date aDay(18122007);
      
    Person B("Ronaldo""278/CMT8 P.15 / Q.10"aDay"8-234-198");

      
    B.PrintPersonalInformation();
      return 
    0;
      

    Bạn còn chỗ nào thắc mắc mình sẽ giải thích, mấy cái class này nó cũng không khó nhưng code nó dài, nên nhìn hơi rối 1 tí thôi. Bạn nhớ chịu khó đặt tên biến cho có ý nghĩa 1 chút, dài 1 tí cũng có sao đâu, code mình viết mà, cũng là công sức của mình vậy, viết dài để lần sau còn đọc lại mà hiểu.
    Đã được chỉnh sửa lần cuối bởi rox_rook : 07-01-2008 lúc 07:42 AM.

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Các hàm IsValidxxx của R2 trả về 1 nghĩa là gì ? Thấy không ổn tí nào.

    Nếu dùng nó làm mã lỗi thì nếu người ta nhập vào (ví dụ ngày 1 tháng 1 - trùng mã lỗi) thì sau này làm sao biết có lỗi hay ko ?
    Keep moving forward!

    ... Retired ...

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

    Hic, mình quên chỉ bạn cái yêu cầu tạo đối tượng con trỏ. Cái này có 2 cách như sau

    Cách 1

    PHP Code:
      
       Person 
    *array[3];/*Khai báo mãng tên "array" giữ 3 con trỏ tới đối tượng 
                               của lớp Person*/
      
    Person *ptr;/*khai báo con trỏ ptr kiểu đối tượng*/
      
      /*vòng lặp này, thì 3 đối tượng sẽ được tạo ra trên vùng nhớ heap
         và dòng " array[x] = ptr;" là con trỏ các con trỏ trỏ tới array[0],array[1]..
         khử tham chiếu giá trị và được gán vào mãng*/
      
    for(int x 03x++){
        
    ptr = new Person;
        
    ptr->ReadInputFromUser();
        array[
    x] = ptr;
      }

      for(
    int x 03x++){
        array[
    x]->PrintPersonalInformation();
      }
      
    /*dòng này giải phóng vùng nhớ*/
      
    for(int x 03x++){
        
    delete array[x];
        array[
    x] = NULL;
      } 
    Trong cách này, thì mãng "array" và 3 con trỏ của nó được lưu ở stack, nhưng 3 đối tượng mà nó tạo ra thì được lưu trên heap, bạn để ý kĩ nha.

    Cách 2
    PHP Code:
      /*Dòng này bây giờ là khởi tạo mãng array giữ 3 đối tượng của lớp Person. Nhưng bây h cái mãng này được lưu trên heap*/
      
    Person *array = new Person[3];
      
    Person *ptr;
      
      for(
    int x 03x++){
        
    ptr = new Person;
        
    ptr->ReadInputFromUser();
        
    /*Bây h không phải là con trỏ khử tham chiếu nữa mà là đối tượng 
        đó được gán vào mãng.*/
        
    array[x] = *ptr;
        
    delete ptr/*giải phóng vùng nhớ luôn chỗ này cho mỗi con trỏ*/
      
    }
      
    /*In ra kết quả*/
      
    for(int x 03x++){
        array[
    x].PrintPersonalInformation();
      }

      
    delete[] array;/*Để ý chỗ này nếu bỏ [] thì chỉ có 1 đối tương được 
                          trả lại vùng nhớ thôi đó*/ 

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

    Thanks nch ^^! Quáng quá rùi :">! Đã fix !! Hic, còn 1 lỗi nữa rất trong lúc input, sorry bạn để mình suy nghĩ lại đã nhé :( ! Mình đã sữa lại gets(), không hiểu sao thằng cin.getline() nó hoạt động kì quá ! Để mình tìm hiểu lại sau ! Sorry bạn nhé . Bạn sữa lại hàm này :
    PHP Code:
    void Person::ReadInputFromUser(){
        
      
    cout << "What's your name :\n";
      
    gets(name);
      
      
    cout << "Where do you live :\n";
      
    gets(address);

      
    cout << "What's your phone number :\n";
      
    gets(phone_no);
      
      
    register_day.enter();/*Chỗ này nó gọi hàm thành viên của lớp Date*/
      
    cout << "\n----------------------------\n";
      
    cout << "\n-Data entered successfully!-\n";

    Đã được chỉnh sửa lần cuối bởi rox_rook : 07-01-2008 lúc 09:52 AM.

  6. #6
    Ngày gia nhập
    12 2007
    Nơi ở
    giữa thiên đường và địa ngục
    Bài viết
    91

    Mặc định xem giùm mình code bài về lớp kế thừa

    thanks bạn đã chỉ cho mình
    mình sẽ cố gắng học hỏi thêm

  7. #7
    Ngày gia nhập
    12 2007
    Nơi ở
    giữa thiên đường và địa ngục
    Bài viết
    91

    Code:
    class Person {
    
    public :
     /*thằng này default constructor, để tạo 1 đối tượng mà mình có thể input
        vào từ bàn phím*/
      Person();
    
      /*Constructor này để ở main ví dụ mình có thể khai báo 
        Person B("Ronaldo", "278/CMT8 P.15 / Q.10", aDay, "8-234-198"); thì nó
        vẫn hiểu, cái này không phải copy constructor đâu nha*/
         Person(const char *aName, const char *anAdresss, const Date &aDate, const char *aPhone);
    
      /*2 thằng hàm thành viên*/
      void ReadInputFromUser();
      void PrintPersonalInformation() const;
    
    
    private :
      char name[20];
      char address[20];
      char phone_no[10];
      Date register_day; /* Dữ liệu của nó có 1 đối tượng của lớp Date*/
    
      /*Tương tự thằng Date, nó cũng có 3 thằng để kiểm tra dữ liệu*/
      void IsNameValid(const char *your_name);
      void IsAddressValid(const char *your_address);
      void IsPhoneValid(const char *your_phone_number);
    };

    bạn ah,đề yêu cầu là xây dựng lớp kế thưa mà.MÌnh làm class person:public mydate{.....} ;thì bị lỗi chả biết sửa thế nào

    Vui lòng cho code vào tag code. Xem chi tiết tại Nội quy hoặc Hỏi/Đáp bên trên thanh công cụ. Nếu vi phạm tiếp sẽ bị xóa mà không cần thông báo trước
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 09-01-2008 lúc 12:09 AM. Lý do: Nhắc nhở?

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

    Bạn lật sách ra, đọc lại về phần kế thừa, post hoàn chỉnh code và lỗi lên đây, mà không phải sữa bừa, "kế thừa" đọc cái tên phải hiểu coi nó là gì và sữa cho logic, rồi mình sẽ giải thích chứ nếu mình cứ đưa code thì bạn không tự làm được đâu.
    Gợi ý đây : dữ liệu kế thừa thì thuộc tính là "protected".
    Trong sách thế nào cũng có ví dụ, lật ra xem đó rồi bắt chước sữa lại xem ? Bạn phải tự cố gắng thì mình mới giúp bạn được. Ok ?

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi chjp xinh kut3 Xem bài viết
    Chjp có code này mà không biết sai ở đâu nhờ mọi người chỉ giùm:
    dề ra: xây dựng 1 lớp mydate gồm các thành phân
    các thuộc tính mô tả ngày,tháng,năm
    hàm thiết lập 3 tham số lấy giá trị ngầm đinh là 1
    hàm hiển thị thông tin ngày,tháng ,năm
    định nghĩa toán tử > để so sánh 2 đối tượng mydate
    xây dựng 1 lớp person được kế thừa từ lớp mydate và bổ sung các thành phần
    name:tên,là 1 xâu không quá 30 kí tự
    phone:số điẹn thoại
    add:địa chỉ,là xâu không quá 40 kí tự
    hàm thiết lập 6 tham số gồm:ngày,tháng,năm sinh,dịa chỉ,điện thoại
    hàm in1 để in thông tin ra màn hình

    viết chương trình khai báo mảng 5 con trỏ đối tượng kiểu person,nhập dữ liệu vào để tạo 5 đối tượng.gọi các hàm thành phần in1() của lớp person thông qua các con trỏ này để in dữ liệu ra màn hình

    code của mình đây

    Code:
    include<iostream.h>
     #include<conio.h>
     #include<string.h>
      class mydate
     {
      public:
       int ng,t,n;
       mydate()
        {
        ng=1;
         t=1;
         n=1;
         }
      mydate(int ng1,int t1,int n1)
       {
       ng=ng1;
       t=t1;
       n=n1;
       }
      void in()
         {
         cout<<ng<<"-"<<t<<"-"<<n;
         }
      class person:public mydate
         {
       public:
        char name[30],add[40];
        int phone;
        person(int dt,char *ten,char *dc,int ng,int t,int n):mydate(ng,t,n)
         {
         phone=dt;
         strcpy(add,dc);
         strcpy(name,ten);
        }
        void in1()
        {
         cout<<name<<"-"<<add<<"-"<<phone;
         mydate::in();
        }
    
         };
       void main()
       {
           int ng,t,n,phone;
           char add[40],name[30];
           person *a[5];
            for(int i=0;i<5;i++)
            {
          cout<<"nhap ten";
          gets(name);
          cout<<"nhap so DT";
          cin>>phone;
          cout<<"nhap ngay";
          cin>>ng;
          cout<<"nhap thang";
          cin>>t;
          cout<<"nhap nam";
          cin>>n;
          a[i]->in1();
           }
           getch();
    
        }
    Chào bạn !
    Đề của bạn ra thật lạ, nếu mình nhớ không nhầm thì kế thừa mang quan hệ 'IS' mà. Đề ở trên lớp person kế thừa lớp mydate nhưng mình nghĩ mydate là 1 thành phần chứ không phải là lớp cha cho lớp con person kế thừa đâu. Vì vậy mình thấy bài làm của bác kia chính xác đấy !
    Thân

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Uh, sai hoàn toàn rồi.

    Tui thấy cậu nên đọc lại lý thuyết đi là hơn.
    Keep moving forward!

    ... Retired ...

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

  1. Mã nguồn C Lỗi code bị lỗi mà ko rõ tại sao. Nhờ mọi người xem giùm !!!
    Gửi bởi shizuoka trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 17-09-2012, 09:26 PM
  2. Bài tập C code không ổn định...sử giùm
    Gửi bởi hoabuichi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 13
    Bài viết cuối: 29-08-2012, 04:03 PM
  3. Nhờ các bạn xem giùm đoạn code asm này với
    Gửi bởi quanghoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 25-02-2010, 11:37 AM
  4. xem giùm em 2 cái code cái nào tốt hơn
    Gửi bởi le_dung762 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 11-08-2009, 10:57 PM
  5. xem giùm code nhân 2 đa thức
    Gửi bởi duong_890 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: 30-10-2008, 04:23 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