C++学习(65)

编程入门 行业动态 更新时间:2024-10-25 18:36:10

C++学习(65)

C++学习(65)

1关于new运算符,错误的是D

A可以用来动态创建对象和对象数组

B使用它创建的对象和对象数组可以使用运算符delete删除

C使用它创建对象时要调用构造函数

D使用它创建对象数组时必须指定初始值

分析:D 可以不指定初始值,调用默认构造函数进行默认初始化。

int*x=new int();//不传值,默认初始化为0

 

2free释放内存之后,指针还指向原来的那块地址,需要我们设置p=NULL;如果我们不手动设置p=NULL;此时p就变成了野指针。

 

free掉一个指针后,指针仍然指向原来的地址。free的意义在于告诉系统目标地址可以被回收。

 

32 位系统中MAR(内存地址寄存器)为32位,可寻址范围为2的32次方Byte,共大约不足4G的内存空间。指针中保存内存地址,所以大小和MAR大小相同。

 

指针的类型用于确定指针所指的对象的类型,因此初始化或赋值时必须保证类型匹配。指针用于间接访问对象,并给予指针的类型提供可执行的操作,例如,int型指针只能把其指向的对象当作int型数据来处理,如果该指针指向了其他类型(如double类型)的对象,则在指针上执行的任何操作都有可能出错。

 

一个有效的指针必然是以下三种状态之一:

保存一个特定的对象的地址;

指向某个对象后面的另一对象;

或者是0值

 

3分解质因数

#include<iostream>  
using namespace std;  
void prim(int m,int n) {  if(m>=n) {  while(m%n)  n++;  m/=n;  prim(m,n);  cout<<n<<endl;  }  }  int main() {  prim(6,2);  }  


分析:n从2开始。第一处为m%n,代表取余。当余数是0的时候表示除尽,跳出while循环,即找出一个质因数。此时一个质因数即为n。

然后 m/=n 即让m除去这个质因数,然后再进入求新m质因数的递归。

举例:m=6,n=2

m>n;

m%n=0,跳出while,n没有加1。此时m=6,n=2

m/=n,此时m=3,n=2  (2为一个质因数)

递归prim(m, n),即prim(3,2);

m>n;

m%n=1,n++,此时m=3,n=3,继续while循环

m%n=0,跳出while循环,此时 m=3,n=3 (3为另一个质因数)

m/=n,此时m=1,n=3

递归 prim(m,n),即 prim(1,3);

不满足条件(m > n),返回上层

输出质因数 n=3

输出质因数 n = 2

 

4程序最小单位是函数,程序是由若干个函数组成。

 

当一个类的某个函数被声明为virtual,则在该类的所有派生类中的同原型函数都是虚函数

分析:《C++ Primer》第五版,P537 页:“当在派生类中覆盖某个虚函数时,可以再一次使用virtual关键字指出该函数的性质。然而这么做并非必须,因为一旦某个函

数被声明为虚函数,则在所有派生类中它都是虚函数”

 

a.成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

 

b.覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

 

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)


6关于C/C++的宏定义,不正确的B

A宏定义不检查参数正确性,会有安全隐患

B宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量

C宏的嵌套定义过多会影响程序的可读性,而且容易出错

D相对于函数调用,宏定义可以提高程序的运行效率

分析:const关键字定义常量比宏安全。尽量以const替换define。尽可能使用const,enum,inline.

 

7下面模板声明中,哪些是非法的(BD)

Atemplate<classType>class C1{};

Btemplate<class T,U,classV>class C2{};

Ctemplate<classC1,typename C2>class C3{};

Dtemplate<typename myT,class myT>class C4{};

分析:B选项的U参数没有指定类型, D选项的 2个形参名同名。

函数模板的格式:

template<class形参名,class形参名,......>返回类型函数名(参数列表)

{

函数体

}

 

类模板的格式为:

template<class形参名 ,class形参名,…>class类名

{... };

 

 D选项的myT在这里是重定义。;typename 和 class 混用没有关系。













更多推荐

C++学习(65)

本文发布于:2024-02-19 16:06:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765092.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!