fork download
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Congdan {
  6.  
  7. protected:
  8.  
  9. int cccd;
  10. int namsinh;
  11.  
  12. public:
  13.  
  14. Congdan() {
  15. cccd = 0;
  16. namsinh = 0;
  17. }
  18. Congdan(int cccd, int namsinh) {
  19. this->cccd = cccd;
  20. this->namsinh = namsinh;
  21. }
  22. virtual void Nhap() {
  23. cout << "Nhap cong dan" << endl;
  24. cin >> cccd >> namsinh;
  25. }
  26. virtual void Xuat() {
  27. cout << "Du lieu cua lop cong dan" << endl;
  28. cout << cccd << namsinh;
  29. }
  30. };
  31.  
  32. class Sinhvien :public Congdan{// khai bao ke thua cua class
  33.  
  34. protected:
  35.  
  36. int MSSV;
  37.  
  38. public:
  39. Sinhvien() {
  40. Congdan();
  41. MSSV = 0;
  42. }
  43. Sinhvien(int MSSV, int cccd, int namsinh) : Congdan(cccd, namsinh) {// ke thua cua constructor
  44. this->MSSV = MSSV;
  45. }
  46. void Nhap() {
  47. cout << "Nhap cua lop sinh vien";
  48. Congdan::Nhap();
  49. cin >> MSSV;
  50. //Hoac cin>>MSSV>>cccd>>namsinh;
  51. }
  52. void DiHoc() {
  53. cout << "Hoc sinh di hoc" << endl;
  54. }
  55. void Xuat() {
  56. cout << "Du lieu cua lop sinh vien ";
  57. Congdan::Xuat();
  58. cout << MSSV;
  59. //cout<<MSSV<<cccd<<namsinh;
  60. }
  61. };
  62. int main() {
  63. Sinhvien a;
  64. a.DiHoc();
  65. //Su dung con tro trong ke thua
  66. Congdan* p;
  67. Congdan b(123, 2003);
  68. Sinhvien sv1(124, 2004, 192929);
  69. p = &b;// duoc
  70. p = &sv1;// cũng được do tính chất là 1 của tính kế thừa .
  71. /*
  72. Sinhvien *p;
  73. Congdan b(123, 2003);
  74. Sinhvien sv1(124, 2004, 192929);
  75. p = &sv1;// được
  76. p= &b;// sẽ bị error do tính chất của kế thừa chỉ có từ cha xuống con chứ không được từ con lên cha .
  77. */
  78. p->Nhap();//Tự đặt câu hỏi Nhap() ở đây sẽ gọi hàm Nhap() của Congdan hay của Sinhvien mình muốn là của sinh viên nhưng thực chất sẽ gọi Nhap() của Congdan vì ban đầu con trỏ p mình khai báo là congdan Nên từ đó mới sinh ra khái niệm virtual .
  79. p->Xuat();//Tương tự cũng sẽ gọi hàm của Congdan
  80. //Muốn sửa hàm Nhap và Xuat thành của lớp Sinhvien thì mình thêm virtual vào đầu các hàm mình muốn nó cân nhắc đến chỗ gọi hàm xem đang được gán với class nào để gọi hàm đó .
  81. return 0;
  82.  
  83. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Hoc sinh di hoc
Nhap cua lop sinh vienNhap cong dan
Du lieu cua lop sinh vien Du lieu cua lop cong dan
2004192929124