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

Đề tài: Lớp CDateTime mô tả về thời gian và ngày tháng kế thừa hai lớp CTime và CDate

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

    Mặc định Lớp CDateTime mô tả về thời gian và ngày tháng kế thừa hai lớp CTime và CDate

    Lớp CTime mô tả về thời gian với các thuộc tính: giờ, phút, giây. Lớp CDate mô tả ngày tháng năm. Bạn hãy xây dựng lớp CDateTime mô tả về thời gian và ngày tháng kế thừa hai lớp CTime và CDate với các chức năng sau: a)Nhập thông tin thời gian và ngày tháng năm từ bàn phím
    b)Hiển thị thông tin thời gian, ngày tháng năm
    c)Cộng hai đối tượng CDateTime
    d)Trừ hai đối tượng CDateTime
    Tớ làm gần xong nhưng có một điều mà tớ không hiểu, đó là cộng hai đối tượng lại bằng hàm chồng toán tử operator nhưng không được. Bài tớ viết như sau:
    C++ Code:
    1. #include<iostream>
    2. #include<math.h>
    3. using namespace std;
    4. class CTime{
    5.     public:
    6.     int Gio;
    7.     int Phut;
    8.     int Giay;
    9.     CTime();
    10.     void nhapTime();
    11.     void hienTime();
    12. };
    13. class CDate{
    14.     public:
    15.     int Ngay;
    16.     int Thang;
    17.     double Nam;
    18.     CDate();
    19.     void nhapDate();
    20.     void hienDate();
    21. };
    22. class CDate_Time: public CDate, public CTime{
    23. public:
    24.     CDate_Time();
    25.     void nhapThongTinThoiGian();
    26.     void hienThongTinThoiGian();
    27.     CDate_Time operator+(CDate_Time,CDate_Time);
    28.     CDate_Time operator-(CDate_Time,CDate_Time);
    29. };
    30. CTime::CTime(){
    31.     Gio = 0;
    32.     Phut = 0;
    33.     Giay = 0;
    34. }
    35. void CTime::nhapTime(){
    36.     cout<<"\nNhap Gio "; cin>>Gio;
    37.     cout<<"\nNhap Phut "; cin>>Phut;
    38.     cout<<"\nNhap Giay "; cin>>Giay;
    39. }
    40. void CTime::hienTime(){
    41.     cout<<"\nGio = "<<Gio;
    42.     cout<<"\tPhut = "<<Phut;
    43.     cout<<"\tGiay = "<<Giay;
    44. }
    45. CDate::CDate(){
    46.     Ngay = 0;
    47.     Thang = 0;
    48.     Nam = 0;
    49. }
    50. void CDate::nhapDate(){
    51.     cout<<"\nNhap Ngay "; cin>>Ngay;
    52.     cout<<"\nNhap Thang "; cin>>Thang;
    53.     cout<<"\nNhap Nam "; cin>>Nam;
    54. }
    55. void CDate::hienDate(){
    56.     cout<<"\nNgay = "<<Nam;
    57.     cout<<"\tThang = "<<Thang;
    58.     cout<<"\tNam = "<<Nam;
    59. }
    60. CDate_Time::CDate_Time(){
    61.     CTime::CTime();
    62.     CDate::CDate();
    63. }
    64. void CDate_Time::nhapThongTinThoiGian(){
    65.     CTime::nhapTime();
    66.     CDate::nhapDate();
    67. }
    68. void CDate_Time::hienThongTinThoiGian(){
    69.     CTime::hienTime();
    70.     CDate::hienDate();
    71. }
    72. CDate_Time CDate_Time::operator+(CDate_Time DateTime1,CDate_Time DateTime2){
    73.     CDate_Time DateTime;//khai bao doi tuong lop CDate_Time
    74.     DateTime.Giay = DateTime1.Giay + DateTime2.Giay;
    75.     DateTime.Phut = DateTime1.Phut + DateTime2.Phut;
    76.     DateTime.Gio = DateTime1.Gio + DateTime2.Gio;
    77.     DateTime.Ngay = DateTime1.Ngay + DateTime2.Ngay;
    78.     DateTime.Thang = DateTime1.Thang + DateTime2.Thang;
    79.     DateTime.Nam = DateTime1.Nam + DateTime2.Nam;
    80.     cout<<"\n Sau khi cong hai doi tuong thoi gian ta co ket qua: ";
    81.     cout<<"\n"<<DateTime.Giay<<"\t"<<DateTime.Phut<<"\t"<<DateTime.Gio;
    82.     cout<<"\n"<<DateTime.Ngay<<"\t"<<DateTime.Thang<<"\t"<<DateTime.Nam;
    83.     return DateTime;
    84. }
    85. CDate_Time CDate_Time::operator-(CDate_Time DateTime1,CDate_Time DateTime2){
    86.     CDate_Time DateTime;//khai bao doi tuong lop CDate_Time
    87.     DateTime.Giay = DateTime1.Giay - DateTime2.Giay;
    88.     DateTime.Phut = DateTime1.Phut - DateTime2.Phut;
    89.     DateTime.Gio = DateTime1.Gio - DateTime2.Gio;
    90.     DateTime.Ngay = DateTime1.Ngay - DateTime2.Ngay;
    91.     DateTime.Thang = DateTime1.Thang - DateTime2.Thang;
    92.     DateTime.Nam = DateTime1.Nam - DateTime2.Nam;
    93.     cout<<"\n Sau khi cong hai doi tuong thoi gian ta co ket qua: ";
    94.     cout<<"\n"<<DateTime.Giay<<"\t"<<DateTime.Phut<<"\t"<<DateTime.Gio;
    95.     cout<<"\n"<<DateTime.Ngay<<"\t"<<DateTime.Thang<<"\t"<<DateTime.Nam;
    96.     return DateTime;
    97. }
    98. int main(){
    99.     cout<<"------------------------------------------------\n";
    100.     CDate_Time datetime,datetime1, datetime2;
    101.     cout<<"\nNhap cac thong tin ve thoi gian tu ban phim\n";
    102.     datetime1.nhapThongTinThoiGian();
    103.     datetime2.nhapThongTinThoiGian();
    104.     cout<<"\nSau day la thong ke thong tin thoi gian ban vua nhap vao\n";
    105.     datetime1.hienThongTinThoiGian();
    106.     datetime2.hienThongTinThoiGian();
    107.     cout<<"\nTong hai doi tuong thoi gian ban vua hap vao la: \n";
    108.     datetime = datetime1 + datetime2;
    109.     datetime = datetime1 - datetime2;
    110.     return 0;
    111. }
    tại sao lại không công hai đối tượng được nhỉ? Tớ phải sửa cái gì để có thể cộng hai đối tượng lại với nhau? Tớ không muốn sửa thành như thế này đâu mặc dù có thể được:
    C++ Code:
    1. CDate_Time CDate_Time::operator-(CDate_Time DateTime1){
    2.     CDate_Time DateTime;//khai bao doi tuong lop CDate_Time
    3.     DateTime.Giay = DateTime1.Giay - Giay;
    4.     DateTime.Phut = DateTime1.Phut - Phut;
    5.     DateTime.Gio = DateTime1.Gio -Gio;
    6.     DateTime.Ngay = DateTime1.Ngay - Ngay;
    7.     DateTime.Thang = DateTime1.Thang - Thang;
    8.     DateTime.Nam = DateTime1.Nam - Nam;
    9.     cout<<"\n Sau khi cong hai doi tuong thoi gian ta co ket qua: ";
    10.     cout<<"\n"<<DateTime.Giay<<"\t"<<DateTime.Phut<<"\t"<<DateTime.Gio;
    11.     cout<<"\n"<<DateTime.Ngay<<"\t"<<DateTime.Thang<<"\t"<<DateTime.Nam;
    12.     return DateTime;
    13. }
    Hạnh phúc luôn đợi ta mỉn cười lại với nó.(^,,^).

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

    - Vì quá tải toán tử là binary operator mà gọi là unary. Compiler nó la làng là đúng rồi. Toán tử + trong class là unary thôi.
    - Cậu chỉ để nó binary khi cần conversion ví dụ :
    C++ Code:
    1. #include <iostream>
    2.  
    3. class Time {
    4. public :
    5.     int x;
    6.  
    7.     Time( int x = 0 ):x( x ) {
    8.     }
    9.  
    10.     Time operator +( const Time& rhs ) {
    11.         return Time( x + rhs.x );
    12.     }
    13. };
    14.  
    15. Time operator +( const Time& lhs, const Time& rhs ) {
    16.     return Time( lhs.x + rhs.x );
    17. }
    18.  
    19. int main()
    20. {
    21.     Time t1( 1 );
    22.     Time t2( 2 );
    23.     Time t3( 3 );
    24.  
    25.     Time t;
    26.     t = 3 + t2;
    27.  
    28.     return 0;
    29. }

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

    unary là gì?
    Sau khi bạn RR giải thích, tớ vẫn chưa giải quyết được vấn đề có lẽ là tớ không hiểu được cách giải thích này.
    Cũng có cách giải quyết như sau:
    C++ Code:
    1. #include<iostream>
    2. #include<math.h>
    3. #include<iomanip>
    4. using namespace std;
    5. class CTime{
    6.     public:
    7.     int Gio;
    8.     int Phut;
    9.     int Giay;
    10.     CTime(int, int, int);
    11.     void nhapTime();
    12.     void hienTime();
    13. };
    14. class CDate{
    15.     public:
    16.     int Ngay;
    17.     int Thang;
    18.     double Nam;
    19.     CDate(int, int, double);
    20.     void nhapDate();
    21.     void hienDate();
    22. };
    23. class CDate_Time: public CDate, public CTime{
    24. public:
    25.     CDate_Time();
    26.     void nhapThongTinThoiGian();
    27.     void hienThongTinThoiGian();
    28.     CDate_Time operator+(CDate_Time);
    29.     CDate_Time operator-(CDate_Time);
    30. };
    31. CTime::CTime(int g = 0,int p = 0,int gi = 0){
    32.     Gio = g;
    33.     Phut = p;
    34.     Giay = gi;
    35. }
    36. void CTime::nhapTime(){
    37.     cout<<"\nNhap Gio "; cin>>Gio;
    38.     cout<<"\nNhap Phut "; cin>>Phut;
    39.     cout<<"\nNhap Giay "; cin>>Giay;
    40. }
    41. void CTime::hienTime(){
    42.     cout<<"\nGio = "<<setw(6)<<Gio;
    43.     cout<<"\tPhut = "<<setw(6)<<Phut;
    44.     cout<<"\tGiay = "<<setw(6)<<Giay;
    45. }
    46. CDate::CDate(int n = 0, int t = 0, double na = 0){
    47.     Ngay = n;
    48.     Thang = t;
    49.     Nam = na;
    50. }
    51. void CDate::nhapDate(){
    52.     cout<<"\nNhap Ngay "; cin>>Ngay;
    53.     cout<<"\nNhap Thang "; cin>>Thang;
    54.     cout<<"\nNhap Nam "; cin>>Nam;
    55. }
    56. void CDate::hienDate(){
    57.     cout<<"\nNgay = "<<setw(6)<<Ngay;
    58.     cout<<"\tThang = "<<setw(6)<<Thang;
    59.     cout<<"\tNam = "<<setw(6)<<Nam;
    60. }
    61. CDate_Time::CDate_Time(){
    62.     CTime::CTime(0,0,0);
    63.     CDate::CDate(0,0,0);
    64. }
    65. void CDate_Time::nhapThongTinThoiGian(){
    66.     CTime::nhapTime();
    67.     CDate::nhapDate();
    68. }
    69. void CDate_Time::hienThongTinThoiGian(){
    70.     CTime::hienTime();
    71.     CDate::hienDate();
    72. }
    73. CDate_Time CDate_Time::operator+(CDate_Time DateTime1){
    74.     CDate_Time DateTime;//khai bao doi tuong lop CDate_Time
    75.     DateTime.Gio = DateTime1.Gio + Gio;
    76.     DateTime.Phut = DateTime1.Phut + Phut;
    77.     DateTime.Giay = DateTime1.Giay + Giay;
    78.     DateTime.Ngay = DateTime1.Ngay + Ngay;
    79.     DateTime.Thang = DateTime1.Thang + Thang;
    80.     DateTime.Nam = DateTime1.Nam + Nam;
    81.     cout<<"\n Sau khi cong hai doi tuong thoi gian ta co ket qua: ";
    82.     cout<<"\n"<<DateTime.Gio<<setw(6)<<"\t"<<DateTime.Phut<<setw(6)<<"\t"<<DateTime.Giay;
    83.     cout<<"\n"<<DateTime.Ngay<<setw(6)<<"\t"<<DateTime.Thang<<setw(6)<<"\t"<<DateTime.Nam;
    84.     return DateTime;
    85. }
    86. CDate_Time CDate_Time::operator-(CDate_Time DateTime1){
    87.     CDate_Time DateTime;//khai bao doi tuong lop CDate_Time
    88.     DateTime.Gio = DateTime1.Gio -Gio;
    89.     DateTime.Phut = DateTime1.Phut - Phut;
    90.     DateTime.Giay = DateTime1.Giay - Giay;
    91.     DateTime.Ngay = DateTime1.Ngay - Ngay;
    92.     DateTime.Thang = DateTime1.Thang - Thang;
    93.     DateTime.Nam = DateTime1.Nam - Nam;
    94.     cout<<"\n Sau khi tru hai doi tuong thoi gian ta co ket qua: ";
    95.     cout<<"\n"<<DateTime.Gio<<setw(6)<<"\t"<<DateTime.Phut<<setw(6)<<"\t"<<DateTime.Giay;
    96.     cout<<"\n"<<DateTime.Ngay<<setw(6)<<"\t"<<DateTime.Thang<<setw(6)<<"\t"<<DateTime.Nam;
    97.     return DateTime;
    98. }
    99. int main(){
    100.     cout<<"------------------------------------------------\n";
    101.     CDate_Time datetime1, datetime2;
    102.     cout<<"\nNhap cac thong tin ve thoi gian tu ban phim\n";
    103.     datetime1.nhapThongTinThoiGian();
    104.     cout<<"\nSau day la thong ke thong tin thoi gian ban vua nhap vao\n";
    105.     datetime1.hienThongTinThoiGian();
    106.     cout<<"\nBan hay nhap vao doi tuong thoi gian thu 2";
    107.     datetime2.nhapThongTinThoiGian();
    108.     datetime2.operator +(datetime1);
    109.     datetime2 = CDate_Time();
    110.     cout<<"\nBan hay nhap vao doi tuong thoi gian thu 2";
    111.     datetime2.nhapThongTinThoiGian();
    112.     datetime2.operator -(datetime1);
    113.     return 0;
    114. }
    Nhưng vấn đề của tớ là làm sao cộng được hai đối tương thôi. Thay vì:
    C++ Code:
    1. datetime2.operator +(datetime1);
    thì tớ muốn
    C++ Code:
    1. datetime.operator +(datetime1,datetime2);
    cơ.
    Hạnh phúc luôn đợi ta mỉn cười lại với nó.(^,,^).

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

    - Cái đó không thể là hàm trong class được. Vì nếu có thể thì syntax nào có thể gọi được nó ? Chỉ có thể là friend hoặc global thôi.
    - Unary là 1 ngôi, Binary là 2 ngôi.

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Hix....nhìn code của bạn này mờ cả mắt *_*...
    code 'hơi kém' về organize và không có style ...
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

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

    Mặc định Lớp CDateTime mô tả về thời gian và ngày tháng kế thừa hai lớp CTime và CDate

    Có style chứ : K&R, anh trước cũng viết kiểu này gần cả năm. Linux programmer thích style này bởi ảnh hưởng bởi shell and perl( space is matter ) !

  7. #7
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Có style chứ : K&R, anh trước cũng viết kiểu này gần cả năm. Linux programmer thích style này bởi ảnh hưởng bởi shell and perl( space is matter ) !
    em lại thấy khác đấy
    Linux programmer dùng _ thay vì camel case

    trong shell và perl

    date_time
    this_is_a_var_or_object
    ...

    Theo nhận xét lập trình trong linux thì em thấy, đây là cách người ta hay dùng, trong Linux họ tránh viết camel case vì khó nhìn code, trong khi 1 dash làm code đọc dễ hơn
    ThisIsAVeryLongVarOrObject
    this_is_a_very_long_var_or_object

    which one is easier to read

    this is a sample of linux kernel source
    C++ Code:
    1. #include "audit.h"
    2. #include <linux/inotify.h>
    3. #include <linux/namei.h>
    4. #include <linux/mount.h>
    5.  
    6. struct audit_tree;
    7. struct audit_chunk;
    8.  
    9. struct audit_tree {
    10.     atomic_t count;
    11.     int goner;
    12.     struct audit_chunk *root;
    13.     struct list_head chunks;
    14.     struct list_head rules;
    15.     struct list_head list;
    16.     struct list_head same_root;
    17.     struct rcu_head head;
    18.     char pathname[];
    19. };
    20.  
    21. struct audit_chunk {
    22.     struct list_head hash;
    23.     struct inotify_watch watch;
    24.     struct list_head trees;     /* with root here */
    25.     int dead;
    26.     int count;
    27.     atomic_long_t refs;
    28.     struct rcu_head head;
    29.     struct node {
    30.         struct list_head list;
    31.         struct audit_tree *owner;
    32.         unsigned index;     /* index; upper bit indicates 'will prune' */
    33.     } owners[];
    34. };
    35.  
    36. static LIST_HEAD(tree_list);

    Visual C# Code:
    1. Naming Conventions
    2.  
    3. C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable “tmp”, which is much easier to write, and not the least more difficult to understand.
    4.  
    5. HOWEVER, while mixed-case names are frowned upon, descriptive names for global variables are a must. To call a global function “foo” is a shooting offense.
    6.  
    7. GLOBAL variables (to be used only if you _really_ need them) need to have descriptive names, as do global functions. If you have a function that counts the number of active users, you should call that “count_active_users()” or similar, you should _not_ call it “cntusr().
    8.  
    9. Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs.
    10.  
    11. LOCAL variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called “i”. Calling it “loop_counter” is non-productive, if there is no chance of it being mis-understood. Similarly, “tmp” can be just about any type of variable that is used to hold a temporary value. If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See next chapter.

    Quote from:
    http://mycplus.com/tutorials/program...-coding-style/
    http://mycplus.com/tutorials/program...and-standards/
    http://www.dcs.napier.ac.uk/~peter/l...ing-style.html


    K&R of course is good though but it is not efficient way to use for Linux environment, especially when Linux already has style convention (Linux kernel style, GNU standard...) Follow the way of creation is a better way to improve your understandings and expend your knowledge.

    Bash Shell and Perl use GNU standard (you can check from Oreilly.com)
    However, there are some misunderstandings about Perl styles. There are two style for Perl programmers, Linux Perl and Windows Perl.
    Linux Perl programmers usually use GNU standard while Windows Perl use C#-convention style (camel) to program, because of OS interaction, Windows API.

    (ps: the Vnese is off, so Kim uses English as the convenient way to type )
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

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

    What I meant is that the way he put spaces và { }, I didn't pay attention on the '_'. But I don't really know Linux kernel and GNU standard though, thanks ! From the top of my head, I think this usually means K&R, not sure though.
    C++ Code:
    1. void shting(){
    2. }

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

  1. XÂY DỰNG CTime
    Gửi bởi lucky-start trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 16-11-2011, 09:26 AM
  2. Kỹ thuật C++ hàm ctime ko trả về thời gian thật của máy
    Gửi bởi kukopuka trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 12-01-2011, 10:50 PM
  3. Các hàm trong <ctime>, xin gúp đỡ?
    Gửi bởi dzitc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 07-08-2010, 05:05 PM
  4. Kỹ thuật C++ xây dựng lớp CTime! Xin giúp đỡ
    Gửi bởi th49.tl 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: 09-07-2010, 12:08 AM
  5. Xây dựng các toán tử trên Class CDate
    Gửi bởi thanhcuong_cn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 27-10-2009, 03:01 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