封装:
隐藏具体的实现,然后提供公开的访问接口,把客观事物的属性封装到一个类内。
继承:
继承就是一种传承,涉及两个类父类(基类)子类(派生类)。
子类传承父类的所有属性,并对父类进行拓展。
举例:要自己实现一个对话框类,可以继承QDailog类再自己拓展编写。
#include <iostream>using namespace std;#include <string>class Animal{public:string name;int age;void show(){cout << name << ":" << age << endl;}};class Cat :public Animal{int legs;public:string color;void fun(){cout << "抓老鼠" << color << endl;}};int main(){cout << sizeof(Cat) << endl;Cat cat;cat.name = "wangcai";cat.color = "black";cat.age = 3;cat.show();cat.fun();}
![QV4M_}M]U@C)WPJU@3_W({3.png](/uploads/projects/lixianyu-bzhwq@ftsr56/a5b25f3f91e8a2f345d99f1ee1e87190.png)
C#C++中若sizeof计算类的大小,只计算成员对象的大小,不计算成员函数的大小
当一个类型中提供了虚函数,则编译器会自动提供一个指针类型的成员来管理这个数据,这个指针交虚表指针。
指针占四个字节,无论类型提供了多少虚函数,只会提供一个虚表指针。
多态:
虚函数:在普通成员函数前加virtual修饰函数
#include<iostream>using namespace std;class A{int x;int y;public://当一个类型中提供了虚函数,则编译器会自动提供一个指针类型的成员来管理这个数据,这个指针交虚表指针。virtual void show(){cout << "this is show A" << endl;}virtual void test(){}};int main(){cout << sizeof(A) << endl;}
函数重写(函数覆盖)=>overwrite:当子类提供了和父类同名的虚函数时,称之为函数重写.
函数重写要求函数的返回值类型、函数名、参数列表必须完全相同.
名字隐藏(namehide)=>当子类提供了和父类同名的数据时叫名字隐藏.  
函数重载=>同一个作用域中,函数名相同、参数列表不同的函数构成重载关系.
#include<iostream>using namespace std;class Animal{public:void show(){cout << "animal show()" << endl;}virtual void run(){cout << "animal run()" << endl;}};class Cat :public Animal{public://名字隐藏,返回值可以不同//int show()//{// cout << "this is cat show()" << endl;//}//函数重写,返回值类型必须相同//一虚则全虚,可省略关键字virtualvoid run(){cout << "this is cat run" << endl;}};int main(){Animal a;a.show();a.run();Cat cat;cat.show();cat.run();Animal *pcat = new Cat();pcat->show();pcat->run();}
