刚刚在CSDN上看到了一道C++找错题题目如下:
- [code=C/C++][/code]
- classA
- {
- public:
- A(){}
- ~A(){}
- };
- classB:publicA
- {
- public:
- B(){}
- ~B(){}
- };
- intmain()
- {
- A*p=newB;
- deletep;
- p=0;
- return0;
- }
问题出现在哪里? 问题是当执行delete p的时候,执行了仅仅是执行了~A{}这个函数,而没有执行~B(){}这个函数。
解决方法是将~A{}变为虚析构函数,virtual ~A{} 為什麼呢?
==========
我之前是学习java的 在java中如果是这种情况我之前遇到过 ,当然我执行的不是析构函数,如下:
- classA{
- publicvoidmethod1(){
- }
- publicvoidmethod2(){
- }
- }
- classBextendsA{
- publicvoidmethod1(){
- }
- @override
- publicvoidmethod2(){
- }
- }
- Aa=newB();
- a.method1();
- a.method2();
这个时候a.method1()执行的其实是A中的method1方法,然而a.method2()执行的确实B中的method2()方法,为什么呢? 因为method2方法签名上面加上了注解(Annotation) @override 这样就达到重写的效果。 其实eclipse 完全可以自动给你加上。
=====
C++ Java
虚函数 -------- 普通函数
纯虚函数 -------- 抽象函数
抽象类 -------- 抽象类
虚基类 -------- 接口
=========
回到上个C++的问题 ,其实是一个道理。 明白了了吗?各位
相关推荐
1. 类与对象:C++同样使用类来定义对象,但与Java不同的是,C++允许类的私有成员在类外进行初始化,且提供了构造函数和析构函数,用于对象的初始化和清理工作。 2. 封装:C++通过成员访问控制(public, protected, ...
在编程世界中,C、C++和JAVA是三门极具影响力的编程语言,广泛应用于系统级开发、游戏引擎、服务器端应用以及移动应用等多个领域。为了提高代码质量、可读性和可维护性,遵循一定的编程规范至关重要。本资料精选了这...
虚函数在C++中允许子类重写父类的方法,Java中类似的概念是`abstract`方法和`@Override`注解。 6. **Error与Exception**:Error是程序无法处理的严重问题,比如系统崩溃或JVM故障,而Exception是程序可以捕获和处理...
9. **虚析构器**和**虚构造器**:虚析构器在C++中确保基类的析构函数在派生类析构时也能被调用,保证资源的正确释放。而Java中没有构造器的概念,所以不存在虚构造器。 10. **方法不能基于不同的返回类型但相同的...
在C++编程中,`virtual`关键字是实现多态性(Polymorphism)的关键机制,这对于理解和编写面向对象的代码至...理解并熟练运用`virtual`函数、构造函数和析构函数的特性,以及继承和重写,是掌握C++面向对象编程的基础。
Java和C++各有优缺点,Java更注重安全性、跨平台性和内存管理,而C++则提供更低级别的控制和更高的性能。 J2SE、J2EE和J2ME分别对应桌面应用、企业级应用和服务端嵌入式应用。J2SE是基础,J2EE用于开发大型分布式...
"卡拉OK表字段.doc"可能涉及数据库设计,而"Util.js"可能是JavaScript的实用工具库,与Java的构造函数和析构函数主题关系不大。 总的来说,理解和掌握构造函数、析构函数(以及在Java中的`finalize()`方法)、函数...
Java和C++都是面向对象的语言,但Java更注重安全性、跨平台性和内存管理,而C++则提供了更低级别的控制。J2SE是标准版,用于桌面应用;J2EE针对企业级应用;J2ME适用于嵌入式设备。 编写Java程序后,使用javac命令...
**题目**:简述C++中继承、虚函数、纯虚函数的概念和用法。 **解析**: - **继承**:是一种机制,允许一个类(派生类)继承另一个类(基类)的特性。继承支持代码复用,减少重复代码。 - **虚函数**:虚函数是用来...
构造函数、析构函数和虚函数内联 构造函数、析构函数可以声明为内联函数,但虚函数通常不声明为内联,因为虚函数需要通过虚表机制实现。 #### 41. auto、decltype和decltype(auto)用法 auto用于自动类型推导,根据...
在C++中,如果一个类的构造函数和析构函数都被声明为私有的,那么其他类将无法直接创建或销毁这个类的实例。这是因为构造函数和析构函数在创建和销毁对象时会被调用,而私有成员函数只允许在类内部访问。为了仍然...
Java中没有像C++那样的析构器,但在 finalize() 方法中可以实现类似的功能,用于清理对象不再使用时的资源。 9. 访问控制修饰符: `public` - 可被任何类访问。 `protected` - 可被同一包内的类和不同包的子类...
- C#的语句结构类似于C++和Java,包括变量声明、赋值、条件语句(if-else)、循环(for、while、foreach)和跳转语句(break、continue)。 - 注释分为单行注释(//)和多行注释(/*...*/)。 2. **数据类型**: ...
- 它结合了C++的性能和Java的易用性,同时引入了许多现代编程语言的特性,如垃圾回收、强类型检查和XML支持。 - **C#语言的特点** - C#支持面向对象编程,包括封装、继承和多态。 - 它拥有简洁的语法,易于学习...
无论是刚开始接触面向对象编程的新手,还是打算转移到c#的具有c,c++或者java基础的程序员,都可以从本书中吸取到新的知识。 作译者 john sharp,content master首席技术专家。content master隶属于cm集团,cm集团...
它结合了多种语言的优点,如C++的强大功能与Java的安全性和易用性。 - **面向对象**:支持封装、继承和多态。 - **安全性**:内置安全机制,防止常见的编程错误。 - **性能**:运行在.NET Framework或.NET Core上,...
C#结合了C++和Java的一些特性,同时也引入了许多新的概念和功能,使得它成为开发高效、可靠软件的理想选择。 C#的关键特性包括: 1. **面向对象**:C#是基于面向对象编程(OOP)的,支持类、接口、继承、多态等...