C++构造和析构以及虚函数应用

简介:
#include <iostream> using namespace std; class A { public: A()//构造函数不能申明为虚函数,不然会报错 { cout<<"构造函数A"<<endl; } ~A() //析构函数应该定义成虚函数,如果不定义成虚函数则会造成内存泄露 { cout<<"析构A"<<endl; } virtual void DoSomething() { cout<<"A is doing something"<<endl; } }; class B:public A { public: B() { cout<<"构造函数B"<<endl; } ~B() { cout<<"析构B"<<endl; }; void DoSomething() { cout<<"Do something in class B"<<endl; } }; int main(int argc, const char * argv[]) { B *b = new B; b->A::DoSomething();//C++覆盖了以后,子类要访问父类的方法,C++是否这种发放访问,C#使用base,OC和java是用super //结果:构造A/构造B/A is doing something A *a = new B; a->DoSomething();//如果A中这个方法定义为虚函数,那么就会调用B中的方法 delete a; //如果A中DoSomething定义为不是函数,结果:构造函数A/构造函数B/A is doing something/析构A //注意:如果A析构函数不定义成虚函数,这种情况下他就会不析构b A *b = new B; //虚函数看指向,不是虚函数看前面的类型 b->DoSomething(); //如果A的DoSomething定义成虚函数的话那么就看后面的指向,如果A中的DoSomething不是虚函数的话那么就会看指针前面的类型,就访问A的方法。附加:只能用子类赋给父类,不能反过来 delete b;//这里就释放对象,调用析构函数 //结果:构造A/构造B/A is doing something/析构B/析构A return 0; }





















本文转自蓬莱仙羽51CTO博客,原文链接: http://blog.51cto.com/dingxiaowei/1366499 ,如需转载请自行联系原作者
相关文章
|
3月前
|
C++
C++一分钟之-虚函数与抽象类
【6月更文挑战第21天】在C++中,虚函数与抽象类是多态的基础,增进类间耦合与灵活性。虚函数实现动态绑定,抽象类定义不可实例化的接口。关键点包括:记得使用`virtual`,避免滥用虚函数,确保派生类实现纯虚函数。抽象类不能直接实例化,派生类必须实现所有纯虚函数。通过实例代码学习和实践,能更好地掌握这些概念以优化代码设计。
36 2
|
17天前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
29 2
|
20天前
|
编译器 C++ 索引
C++虚拟成员-虚函数
C++虚拟成员-虚函数
|
25天前
|
JavaScript Java C语言
面向对象编程(C++篇3)——析构
面向对象编程(C++篇3)——析构
23 2
|
27天前
|
存储 搜索推荐 Serverless
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
26 1
|
18天前
|
存储 编译器 C++
C++多态实现的原理:深入探索与实战应用
【8月更文挑战第21天】在C++的浩瀚宇宙中,多态性(Polymorphism)无疑是一颗璀璨的星辰,它赋予了程序高度的灵活性和可扩展性。多态允许我们通过基类指针或引用来调用派生类的成员函数,而具体调用哪个函数则取决于指针或引用所指向的对象的实际类型。本文将深入探讨C++多态实现的原理,并结合工作学习中的实际案例,分享其技术干货。
31 0
|
21天前
|
JSON Android开发 C++
Android c++ core guideline checker 应用
Android c++ core guideline checker 应用
|
25天前
|
JavaScript 前端开发 Java
面向对象编程(C++篇2)——构造
面向对象编程(C++篇2)——构造
24 0
|
3月前
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
|
3月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)