首页 > 试题广场 >

下面说法正确的是()

[单选题]
下面说法正确的是()
  • 在C++语言中new和malloc都是在堆(heap)上进行动态的内存操作,可以互相代替。
  • C++语言重载(over load)是指子类重新定义父类的虚函数的方法。
  • C++语言函数既可以嵌套定义又可以递归调用。
  • 在C++语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参(不考虑引用、指针等情况)。
推荐
答案:D
A,关键字new和malloc都是在堆(heap)上进行动态的内存申请,但是内存释放不同,new申请的内存用delete释放,malloc申请的内存用free释放,因此不能代替

B,子类重新定义父类的虚函数的方法 这种叫覆盖,override
C,函数不能嵌套定义,也就是函数内部不能定义函数
编辑于 2015-01-22 14:39:31 回复(6)
关键字new和malloc都是在堆(heap)上进行动态的内存申请,但是内存释放不同,new申请的内存用delete释放,malloc申请的内存用free释放,因此不能代替【动态申请就是运行时申请内存】
子类重新定义父类的虚函数的方法 这种叫覆盖,override


发表于 2017-03-10 19:57:40 回复(0)
B选项,重载针对的是运算符,对虚函数的重定义是叫覆盖。
发表于 2016-11-17 11:20:37 回复(0)
new和malloc是不可替代的;
子类重新定义父类的虚函数的方法是over ride;
C++不支持函数的嵌套定义;

选D
发表于 2015-01-21 14:03:28 回复(0)
重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。
覆盖是存在类中,子类重写从基类继承过来的函数。但是函数名、返回值、参数列表都必须和基类相同。如果子类覆盖的是基类的虚函数,可以用来实现多态。当子类重新定义基类的虚函数之后,基类指针可以根据赋给它不同子类指针动态的调用子类中的虚函数,可以做到动态绑定,这就是多态。

编辑于 2017-10-03 10:12:28 回复(0)
我想说的是,对于D选项,是不是要考虑形参和实参是不是指针类型
发表于 2015-10-20 10:01:57 回复(7)
函数不能嵌套定义;
在一个函数中申明别的函数可以的,但是里面的这个函数的具体实现不能再别的函数里面。
函数不能嵌套定义,但是可以嵌套调用。
发表于 2015-08-26 16:05:55 回复(0)
对于D。
我觉得,可能题目想表达的是,引用和指针,都是对实参的直接修改,并没有涉及到,形参到实参的传递
发表于 2017-02-23 17:03:18 回复(0)
针对C选项
发表于 2016-09-03 18:10:41 回复(0)
D:形参是引用的怎么解释?
发表于 2016-07-03 22:53:44 回复(0)
D
c语言的函数调用都是值传递,也就是说函数操作的是实参的副本,所以只能把实参的值传送给形参,形参的值不能传送实参
发表于 2015-01-19 21:03:39 回复(4)
A new和delete的释放方法不同.
B 子类重新定义父类虚函数的行为叫做 重写(覆盖)
C C++语言函数可以递归调用但是不能嵌套定义.
D 正确, 在C++语言调用函数中,只能把实参的值传给形参,形参的值不能传给实参.(不考虑引用,指针等情况)
发表于 2017-09-04 16:37:03 回复(0)

new和malloc的区别

0.       属性

new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。

1.       参数

使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。

2.       返回类型

new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。

3.       分配失败

new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。

4.      自定义类型

         new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

         malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

5.      重载

C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。而malloc不允许重载。

6.       内存区域

new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中。

发表于 2020-08-09 20:41:26 回复(0)
来自@牛客-007
答案:D
A,关键字new和malloc都是在堆(heap)上进行动态的内存申请,但是内存释放不同,new申请的内存用delete释放,malloc申请的内存用free释放,因此不能代替

B,子类重新定义父类的虚函数的方法 这种叫覆盖,override
C,函数不能嵌套定义,也就是函数内部不能定义函数
发表于 2017-05-10 15:25:46 回复(0)

A. 在C++语言中,new和malloc都可以用于在堆(heap)上进行动态的内存操作。它们都可以用来分配内存空间,并且返回指向该内存空间的指针。但是,它们并不完全相同且不能互相代替。主要区别如下:

  • new是C++中的运算符,malloc是C语言中的库函数。
  • 使用new分配内存时,会调用对象的构造函数进行初始化;而malloc只是简单地分配一块内存,并不会进行对象的构造。
  • new和delete必须成对使用,而malloc和free也必须成对使用。

B. C++语言中的重载(overload)是指在同一作用域内定义多个具有相同名称但参数列表不同的函数或运算符。重载的目的是为了提供更灵活的函数调用方式,以适应不同的参数类型和个数。子类重新定义父类的虚函数的方法称为覆盖(override),而不是重载。

C. C++语言中,函数既不可以嵌套定义,可以递归调用。函数嵌套是指在一个函数内部定义另一个函数。被定义的函数只能在包含它的函数内部使用。函数递归调用是指一个函数直接或间接地调用自身。递归函数通常使用条件语句来控制递归的结束。

D. 在C++语言中,函数参数传递有多种方式,包括传值(by value)、引用(by reference)和指针(by pointer)。当使用传值方式时,实参的值会被复制到形参中,在函数内部对形参的修改不会影响实参的值。因此,在函数调用时,只能将实参的值传递给形参,而形参的值不能传送回实参。

因此,选项 D 是正确的。

发表于 2023-10-24 20:48:39 回复(0)
new底层有调用构造函数
发表于 2023-08-27 11:54:04 回复(0)
D选项不会存在这种情况吗?
int fun(int a)
{
    a += 1;
    return a;
}
int main()
{
    int a = 5;
    a = fun(a);
    return 0;
}

发表于 2021-04-14 20:08:20 回复(0)
d选项,形参有默认值呢?
发表于 2021-01-10 08:53:26 回复(0)
new是关键字,malloc是库函数,使用时还需要强转,因为malloc还回值是void*类型,然后c++中,函数可以嵌套声明,但是不能嵌套定义
发表于 2019-08-04 10:13:01 回复(0)
new和delete成对存在,malloc和free成对存在,如果想要new替代malloc,那么对应的delete也要替换为free;函数可以嵌套调用而不可以嵌套定义,也可以在函数中声明其他函数;
发表于 2018-03-27 16:59:10 回复(0)
C++语言函数既不可以嵌套定义,但可以递归调用。

发表于 2018-02-03 09:47:25 回复(0)