备案名称和网站名称不一致,wordpress调用数据库文本,网站开发怎么兼容pc和移动端,深圳极速网站建设定制类的三大特性
封装、继承、多态 多态的实现条件#xff1a;子类重写父类的虚函数#xff0c;父类的指针或引用指向子类#xff0c;当调用该重写的函数时#xff0c;调用子类的函数而不是父类的函数。当有多个子类时#xff0c;通过不同子类调用该函数#xff0c;产生不同…类的三大特性
封装、继承、多态 多态的实现条件子类重写父类的虚函数父类的指针或引用指向子类当调用该重写的函数时调用子类的函数而不是父类的函数。当有多个子类时通过不同子类调用该函数产生不同的行为表现为多态。
虚函数表
每一个有虚函数的类都有一个虚函数表简称虚表。有虚函数的类定义的对象有一个虚函数表指针简称虚表指针该虚表指针指向虚函数表虚函数表中存储的是虚函数的地址。 多态的实现发生在父子类之间父类中定义virtual声明的虚函数子类继承父类并重写虚函数。定义的对象满足父类的指针或引用指向子类子类对象的虚函数表中存储的虚函数地址如果是子类自己定义的新的虚函数则虚函数的地址指向子类的函数地址如果子类重写父类的虚函数则虚函数地址指向子类的函数地址如果存在子类未重写的继承自父类的虚函数则虚函数地址指向父类的函数地址。
拷贝构造和拷贝赋值
两者的本质区别是否有新对象的产生拷贝构造的本质是个构造函数会产生新的对象而拷贝赋值只是将数值赋值给一个已经存在的对象不会产生新的对象。
class A{
A(A a){}//拷贝构造
};拷贝构造函数的参数必须是引用类型如果采用值类型类的非指针或引用对象作为参数会引起拷贝构造函数的调用而本身就是在定义拷贝构造函数如此会引起拷贝构造函数的递归调用一旦遇到使用拷贝构造的地方会引起函数的无限递归调用而崩溃。 **拷贝构造被调用的几种情况**对象的非指针或引用方式作为函数的返回值对象的非指针或引用方式作为函数的参数用一个对象去创建另一个对象。 为什么要避免拷贝构造函数的调用会引起新对象的创建效率低资源消耗多如果类中有指针类型的成员又没有处理好深拷贝浅拷贝的问题会引起错误。 深拷贝浅拷贝的问题提供的默认拷贝构造函数是浅拷贝函数调用时将对象中的数据进行逐字节拷贝如果类中的成员变量都是非指针类型的变量使用默认的拷贝构造函数是没问题的但是如果有指针类型的成员变量此时默认的拷贝构造函数在执行到对该变量的数值处理时是将指针的值直接赋值给要创建的对象此时就会出现一个问题原对象的指针和新创建的对象中的指针类型的成员变量指向同一块地址当释放其中一个对象时指针类型的成员变量会将指向的内存进行释放但是此时另一个对象指针类型的成员变量仍指向那块内存当释放两一个对象时又会释放一次该内存引起double free所以在一个类中有指针类型的成员变量时需要自己重写拷贝构造函数将指针类型的成员分配与原对象一样的内存然后把数据拷贝到新创建的内存中也就是所谓的深拷贝这样前后两个对象分别指向不同的内存块避免了double free问题的发生。
参数传递的几种方式
值传递 使用时会将值复制一份将复制的值传递到被调用的函数中进行使用参数在被调用函数中的修改不会影响外部函数中的值 指针传递 为值取一个别名传递给被调用函数使用在函数中对参数值的修改会引起外部函数中数值的修改 应用传递 创建一个指针指向原来的地址将这个指针作为参数传递给被调用函数使用数值在被调用函数中的修改会引起外部函数中数值的修改 指针和引用的异同 同都可以对所指向的对象进行修改 异指针是变量内容是一个地址引用只是为对象起了一个别名 指针可以在声明的时候不进行赋初值引用在声明的时候必须赋初值 指针可以改变指向的对象引用不可以 指针可以为空引用不可以为空 可以有多级指针没有多级引用 操作不一样 求sizeof不一样指针求sizeof为常量4而对引用求sizeof是引用对象所占用的内存大小。