当前位置: 首页 > news >正文

网站改版需要注意什么自适应自助建站网站

网站改版需要注意什么,自适应自助建站网站,城市形象设计vi手册,西班牙语网站建设多态#xff08;Polymorphism#xff09;是面向对象编程中的一个重要概念#xff0c;它允许不同类的对象对同一消息做出不同的响应。多态性使得可以使用统一的接口来操作不同类的对象#xff0c;从而提高了代码的灵活性和可扩展性。 一、多态的表现形式 1. 静态多态…        多态Polymorphism是面向对象编程中的一个重要概念它允许不同类的对象对同一消息做出不同的响应。多态性使得可以使用统一的接口来操作不同类的对象从而提高了代码的灵活性和可扩展性。 一、多态的表现形式 1. 静态多态编译时多态 静态多态主要通过函数重载、运算符重载以及模板来实现。通过不同的参数列表、泛型类来选择合适的函数。 重载 #include iostreamvoid print(int a) {std::cout Integer: a std::endl; }void print(double a) {std::cout Double: a std::endl; }int main() {print(10); // 调用 void print(int)print(10.5); // 调用 void print(double)return 0; } 模板 #include iostreamtemplate typename T void print(T a) {std::cout Value: a std::endl; }int main() {print(10); // 生成 void printint(int)print(10.5); // 生成 void printdouble(double)return 0; } 2. 动态多态运行时多态 动态多态主要由虚函数和继承来实现根据对象的实际类型来调用相应的函数。 #include iostreamclass Base { public:virtual void print() const { // 如果这里将virtual注释掉下面两个都会输出Basestd::cout Base std::endl;}virtual ~Base() {} // 虚析构函数 };class Derived : public Base { public:void print() const override {std::cout Derived std::endl;} };int main() {Base* basePtr new Base();Base* derivedPtr new Derived();basePtr-print(); // 输出 BasederivedPtr-print(); // 输出 Deriveddelete basePtr;delete derivedPtr;return 0; } 上面的代码中又提到了把virtual注释掉的情况这涉及到了 “静态类型” 和 “动态类型” 。在这一部分结束之后会讲到。 二、虚函数表、虚函数指针 虚函数通过运行时的动态绑定来实现在子类中重写基类的函数。虚函数的原理可以通过虚函数表、虚函数指针来解释。 1. VTable和vptr ·每个包含虚函数的类都有一个虚函数表VTable是一个指向函数指针的数组。 ·每个对象创建之后会有一个虚函数指针vptr指向类的虚函数表VTable。 ·当调用虚函数时会通过vptr查找VTable然后调用对应的函数。 2. 构造函数不能是虚函数 在对象创建时编译器会给对象的vptr赋值然后再调用构造函数如果构造函数是虚函数此时就陷入了死循环。 3. 析构函数可以是虚函数 通过将基类的析构函数声明为虚函数可以确保在通过基类指针删除子类对象时调用到子类的析构函数合适地释放资源。 #include iostreamclass Base { public:virtual ~Base() {std::cout Base destructor std::endl;} };class Derived : public Base { public:~Derived() {std::cout Derived destructor std::endl;} };int main() {Base* ptr new Derived();delete ptr; // 先调用 Derived 的析构函数然后再调用 Base 的析构函数return 0; } 三、静态类型、动态类型 静态类型是指对象在声明时的类型在编译期已既定。 动态类型一个指针、引用目前指向的对象的类型在运行时确定的。 再来看我们刚才的代码。 在函数调用时虚函数会根据动态类型来调用而普通函数就通过静态类型。 #include iostreamclass Base { public:/*virtual*/ void print() const { // 将virtual注释掉下面两个都会输出Basestd::cout Base std::endl;} };class Derived : public Base { public: void print() const /*override*/ { // override和上面的virtual对应std::cout Derived std::endl;} };int main() {Base* basePtr new Base(); // 静态类型Base动态类型BaseBase* derivedPtr new Derived(); // 静态类型Base动态类型DerivedDerived* thirdPtr new Derived(); // 静态类型Derived动态类型DerivedbasePtr-print(); // 输出 BasederivedPtr-print(); // 输出 BasethirdPtr-print(); // 输出 Deriveddelete basePtr;delete derivedPtr;delete thirdPtr;return 0; } 四、static_cast和dynamic_cast的安全与否 1. static_cast static_cast是一种显式类型转换主要用于已知的类型转换。 向上转型从派生类指针或引用转换为基类指针或引用是安全的因为派生类对象可以被视为基类对象的一个特例。基本类型转换如 int 到 double也是安全的。不进行运行时检查因此在某些情况下可能会导致未定义行为特别是当进行向下转型时。 2. dynamic_cast dynamic_cast是一种运行时类型检查的类型转换主要用于多态类型之间的转换。 向上转型从派生类指针或引用转换为基类指针或引用是安全的。向下转型从基类指针或引用转换为派生类指针或引用是安全的因为它会在运行时检查类型的有效性。运行时检查类型安全如果转换不成功会返回 nullptr对于指针或抛出 std::bad_cast 异常对于引用。
http://www.dnsts.com.cn/news/217172.html

相关文章:

  • 怎么用ps做网站上的产品图重庆市有几个区
  • 大鹏附近网站建设广告片拍摄的具体流程
  • 嘉兴建设中学网站网站如何添加js代码
  • lol小米和谁做的视频网站重庆营销型网站开发公司电话
  • 企业网站排名提升软件能优化网站架构的建设
  • 网站开发需要多少钱服务网站地图制作方法
  • 厦门网站建设策划网易企业邮箱 登录
  • 网站首页设计收费定制公交app
  • 网站开发建设专业做轻淘客网站要多大的空间
  • 开发手机网站用什么语言姜堰区住房和城乡建设局网站
  • 北京做网站最好的公司站长统计app进入网址
  • 怎么做平台网站吗做网站优化有什么作用
  • 商业网站网址学历提升专升本
  • 公司营销型网站公司本地南昌网站建设
  • 自主建站平顶山建设银行网站
  • 企业建立网站的优势松江洞泾网站建设
  • 盘锦建设资质网站企业网站功能模块
  • 温州网站建设公司公司哪家好女性手表网站
  • 交通行业门户网站建设的必要性东莞详细页设计
  • 宜城网站开发新科网站建设
  • 知乎 php网站开发书籍在线电子商务网站开发
  • 坪洲网站建设wordpress主题自动启动插件
  • 哪里有网站模板下载自己怎么在网上注册公司
  • 就业专项资金网站建设dedecms农业种植网站模板
  • 龙华龙岗网站建设公司电子商务的网站开发
  • 网站建设套餐内容网站链接交换
  • 招商网站平台wordpress如何上传源码
  • 有源码后怎么做网站跨境一件代发平台
  • 做啊录音网站科技让生活更美好作文500字
  • 云南网站设计外包网络优化行业怎么样