Q. java与C++的主要区别
有很多不同,其中一些主要的不同是:
- java有自动垃圾回收,而C++有析构函数,当对象被破坏时,它会自动调用。
- Java不支持指针、模板、联合、运算符重载、结构等。
- C++没有内置的线程支持,而在java中有一个继承的线程类来创建一个新线程。
- Java中没有goto
- C++支持方法重载和运算符重载,但java只有方法重载。
- C++支持使用类的多继承,但java不支持使用类的多重继承。我们需要接口来在Java中实现多个继承。
- Java是 解释 因此,平台无关,而C++不是。编译时,java源代码转换成JVM。 字节码 .解释器在运行时执行该字节码并给出输出。C++使用编译程序运行和编译,编译器将源代码转换为机器级语言。
问:C++访问说明符是什么?
访问说明符用于定义如何在类之外访问成员(函数和变量)。
- 私人: 声明为private的成员只能在同一个类中访问,不能在声明的类之外访问。子类也不允许访问父类的私有成员。
- 公众: 宣布为公众的成员可以从任何地方访问。
- 受保护的: 只有类及其子类可以访问受保护的成员。
你知道吗 当C++中派生类方法受到更严格的访问时会发生什么?
主要C++特征
课程: 类是数据、函数或方法的蓝图。类不占用任何空间。
- 对象: 对象是面向对象系统中的基本运行时实体,对象是类的实例,这些是用户定义的数据类型。
- 封装和数据抽象: 将数据和函数包装(组合)成一个单元称为封装。外部世界无法访问数据,只有包装在类中的函数才能访问数据。这种将数据与程序直接访问隔离的做法称为数据隐藏或信息隐藏。
- 数据抽象 –只向外部世界提供所需信息,并隐藏实施细节。例如,考虑一个具有公共函数的类复合体作为GET Real.()和GeMigAG()。我们可以将该类实现为大小为2的数组或两个变量。抽象的优点是,我们可以随时更改实现,复杂类的用户不会受到影响,因为我们的方法接口保持不变。如果我们的实施是公开的,我们就无法改变它。
- 继承: 继承是一个类的对象获取另一个类的对象属性的过程。它支持层次分类的概念。继承提供了可重用性。这意味着我们可以在不修改现有类的情况下向其添加其他特性。
- 多态性: 多态性意味着能够采取多种形式。一个操作在不同的情况下可能表现出不同的行为。行为取决于操作中使用的数据类型。
- 动态绑定: 在动态绑定中,响应函数调用要执行的代码是在运行时决定的。C++具有支持此功能的虚拟函数。
- 消息传递: 对象通过相互发送和接收信息来相互通信。对象的消息是执行过程的请求,因此将调用接收对象中生成所需结果的函数。消息传递包括指定对象的名称、函数的名称和要发送的信息。
Q C++中的结构与类
- 在C++中,结构与类相同,除了以下不同:
- 类的成员默认为私有,结构的成员默认为公共。
- 从类/结构派生结构时,基类/结构的默认访问说明符为public。在派生类时,默认的访问说明符是private。
Q Malloc()vs new / 删除vs免费
以下是malloc()和new运算符之间的区别。
- new是一个运算符,而malloc()是一个函数。
- new返回精确的数据类型,而malloc()返回void*。
- 新调用构造函数(类实例会自动初始化和反初始化),而malloc()不会(类不会自动初始化或反初始化)
- 语法:
- int*n=新的int(10);//用new()初始化
- str=(char*)malloc(15)//malloc()
免费的() 用于C中由malloc()或calloc()分配的资源
删去 在新的C++中分配的资源使用
Q 内联函数
C++提供了一个内联函数来减少函数调用开销。内联函数是一个函数,当它被调用时,它会在一行中展开。当内联函数被调用时,内联函数的整个代码会在内联函数调用时被插入或替换。这个替换是由C++编译器在编译时执行的。如果内联函数很小,它可能会提高效率。
定义函数内联的语法是:
内联返回类型函数名(参数)
{
//功能代码
}
记住,内联只是对编译器的一个请求,而不是命令。编译器可以忽略内联请求。
Q C++中的类与函数
friend类可以访问声明为friend的其他类的私有和受保护成员。允许特定类访问其他类的私有成员有时很有用。例如,可以允许LinkedList类访问节点的私有成员。
友元函数与友元类一样,友元函数可以被授予访问私有和受保护成员的特殊权限。好友功能可以是:
a) 另一类的方法
b) 全局函数
关于friend函数和类的要点:
1) 朋友只能用于有限的目的。太多的函数或外部类被声明为具有受保护或私有数据的类的朋友,这降低了在面向对象编程中封装单独类的价值。
2) 友谊不是相互的。如果A类是B的朋友,那么B不会自动成为A的朋友。
3) 友谊不是继承的(详见此)
4) Java中没有朋友的概念。
Q 函数重载 VS 运算符重载
函数重载是C++中的一个特性,其中两个或多个函数可以具有相同的名称,但不同的参数类型和不同的参数数量。
注意:不允许重载具有不同返回类型的函数。
操作重载允许我们让操作符为用户定义的类工作。例如,我们可以在类似字符串的类中重载运算符“+”,这样我们就可以只使用+,将两个字符串连接起来。
算术运算符可能重载的其他示例类有复数、小数、大整数等。
Q 复制构造函数
复制构造函数是使用同一类的另一个对象初始化对象的成员函数。复制构造函数具有以下通用函数原型:ClassName(const ClassName&old_obj);
点(intx1,inty1){x=x1;y=y1;}
//复制构造函数
点(const Point&p2){x=p2.x;y=p2.y;}
什么时候调用复制构造函数?
在C++中,复制构造函数可以在以下情况下调用:
- 当类的对象通过值返回时。
- 当类的一个对象作为参数通过值传递(给函数)时。
- 当一个对象基于同一类的另一个对象构造时。
- 当编译器生成临时对象时。
我们能把副本设为私有吗?
是的,复制构造函数可以设置为私有
Q 什么是继承?
不同种类的物体通常有一定数量的共同点。然而,每一个都定义了使它们不同的附加特性。面向对象编程允许类从其他类继承常用的状态和行为
Q 什么是静态成员?
static是C++中用来给元素赋予特殊特性的关键字。静态元素在程序生命周期中仅在静态存储区域中分配一次存储。他们有一个范围,直到项目生命周期。Static关键字可以与以下内容一起使用:,
- 静态成员函数没有此指针。
- 静态成员函数不能是虚拟的
- 如果任何成员函数声明是静态成员函数声明,则不能重载具有相同名称和名称参数类型列表的成员函数声明。
- 静态成员函数不能声明为const、volatile或const volatile。
点击 在这里 阅读C++更多有趣的事实
点击 在这里 练习基于“输出是什么”的问题?
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论