封装:

隐藏具体的实现,然后提供公开的访问接口,把客观事物的属性封装到一个类内。

继承:

继承就是一种传承,涉及两个类父类(基类)子类(派生类)。
子类传承父类的所有属性,并对父类进行拓展。
举例:要自己实现一个对话框类,可以继承QDailog类再自己拓展编写。

  1. #include <iostream>
  2. using namespace std;
  3. #include <string>
  4. class Animal
  5. {
  6. public:
  7. string name;
  8. int age;
  9. void show()
  10. {
  11. cout << name << ":" << age << endl;
  12. }
  13. };
  14. class Cat :public Animal
  15. {
  16. int legs;
  17. public:
  18. string color;
  19. void fun()
  20. {
  21. cout << "抓老鼠" << color << endl;
  22. }
  23. };
  24. int main()
  25. {
  26. cout << sizeof(Cat) << endl;
  27. Cat cat;
  28. cat.name = "wangcai";
  29. cat.color = "black";
  30. cat.age = 3;
  31. cat.show();
  32. cat.fun();
  33. }

QV4M_}M]U@C)WPJU@3_W({3.png
C#C++中若sizeof计算类的大小,只计算成员对象的大小,不计算成员函数的大小
当一个类型中提供了虚函数,则编译器会自动提供一个指针类型的成员来管理这个数据,这个指针交虚表指针。
指针占四个字节,无论类型提供了多少虚函数,只会提供一个虚表指针。

多态:

虚函数:在普通成员函数前加virtual修饰函数

  1. #include<iostream>
  2. using namespace std;
  3. class A
  4. {
  5. int x;
  6. int y;
  7. public:
  8. //当一个类型中提供了虚函数,则编译器会自动提供一个指针类型的成员来管理这个数据,这个指针交虚表指针。
  9. virtual void show()
  10. {
  11. cout << "this is show A" << endl;
  12. }
  13. virtual void test()
  14. {
  15. }
  16. };
  17. int main()
  18. {
  19. cout << sizeof(A) << endl;
  20. }

函数重写(函数覆盖)=>overwrite:当子类提供了和父类同名的虚函数时,称之为函数重写.
函数重写要求函数的返回值类型、函数名、参数列表必须完全相同.
名字隐藏(namehide)=>当子类提供了和父类同名的数据时叫名字隐藏.
函数重载=>同一个作用域中,函数名相同、参数列表不同的函数构成重载关系.

  1. #include<iostream>
  2. using namespace std;
  3. class Animal
  4. {
  5. public:
  6. void show()
  7. {
  8. cout << "animal show()" << endl;
  9. }
  10. virtual void run()
  11. {
  12. cout << "animal run()" << endl;
  13. }
  14. };
  15. class Cat :public Animal
  16. {
  17. public:
  18. //名字隐藏,返回值可以不同
  19. //int show()
  20. //{
  21. // cout << "this is cat show()" << endl;
  22. //}
  23. //函数重写,返回值类型必须相同
  24. //一虚则全虚,可省略关键字virtual
  25. void run()
  26. {
  27. cout << "this is cat run" << endl;
  28. }
  29. };
  30. int main()
  31. {
  32. Animal a;
  33. a.show();
  34. a.run();
  35. Cat cat;
  36. cat.show();
  37. cat.run();
  38. Animal *pcat = new Cat();
  39. pcat->show();
  40. pcat->run();
  41. }