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)参数不同;

4virtual 关键字可有可无。

 

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 混用没有关系。













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值