c++考试参考题

c++考试参考题

1、对c++和c语言的兼容性,描述正确的是 (c++兼容c )

2、c++中使用流进行输出,其中输出到屏幕的对象是(cin)

3、对使用关键字new所开辟的动态内存空间,释放时必须使用(delete)

4、class成员声明时没有使用private关键字,则默认是(private)

5、如果一个类没有定义任何构造函数,下列描述正确的是()

编译期总是会自动生成一个不带参数的构造函数

6、一个类可以有几个析构函数(1个)

7、int Func(int, int)不可以与下列哪个函数构成函数重载()

double Func(int, int)

8、函数参数有默认值,下列说法正确的()

该参数之后的参数都需要有默认值

9、c++中解决菱形继承冲突的机制是(虚基类)

10、已定义类A并有合法语句 A* p = new A(5) ,那么说法正确的是()

类A一定有一个显示定义的构造函数

11、在一个类中,哪些成员可以是多个

静态成员函数

12、new和mallco的区别说法不正确的是(new和mallco可以互换使用)

13、int id[sizeof(unsigned long)]; 这个对吗?为什么?

正确,sizeof是编译期运算符

14、某文件中定义的静态全局变量(或称静态外部变量)其作用域是 (本文件 ) ?

15、引用与指针的区别不正确的是?

引用和指针都可以指向空值

16、const与 #define的比较不正确的是?(IDE可以对宏定义进行调试)

17、const与constexpr的说法不正确的是(const是编译期常量)

18、malloc/free 与 new/delete的说法不正确的是 ()

由于c++是兼容c语言的,可以使用malloc替换new,free替换delete使用

19、若数组名作实参而指针变量作形参,函数调用实参传给形参的是?

数组第一个元素的地址

20、构造函数声明为explicit A(int n),下列代码不正确的是()

A a{1.0}

21、关于内联函数的说法正确的是()

内联函数会做类型检查

22、“new”in c++ is a?

operator

23、final关键字的作用说法错误的是()

可以修饰类静态方法

24、关于继承的说法错误的是?()

c++不允许多继承

25、const不能修饰哪些信息()

可以修饰类的静态方法

26、访问权限说法错误的是()

子类无法访问父类受保护成员

27、关于类对象成员初始化的顺序说法错误的是()

根据类的构造函数参数初始化列表的顺序初始化

28、虚表的说法正确的是()

虚函数表是在编译时创建的

29、有继承关系的类,析构函数为什么要定义为虚析构()

只有虚函数才能正确释放内存,否则可能会导致内存泄漏

30、下列方法定义会冲突的是()

void print(const int) const;
void print(const int);

31、引用与指针的区别

  1. 指针和引用的自增运算结果不一样
  2. sizeof的大小不一样
  3. 引用定义时必须初始化并且不能改变

32、static的说法正确的是

  1. 可以隐藏变量和函数
  2. static变量默认是0

33、虚函数和内联函数的说法正确的是

虚函数是运行时确定

内联函数是编译时替换的

虚函数不可以是内联函数

34、必须使用初始化列表进行初始化的是

引用成员

常量成员

当调用一个成员类的构造函数,而它拥有一组参数时

当调用一个基类的构造函数,而它拥有一组参数时

35、多态的实现方式有哪些

重载、模板、覆盖、虚函数

36、继承的缺点有哪些

父类的内部细节对子类是可见的
子类与父类是一种高耦合,违背了面向对象思想。
子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。
如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。

37、组合的优点有哪些

当前对象只能通过所包含的那个对象去调用其方法,所以所包含的对象的内部细节对当前对象时不可见的。
当前对象与包含的对象是一个低耦合关系,如果修改包含对象的类中代码不需要修改当前对象类的代码。
当前对象可以在运行时动态的绑定所包含的对象。可以通过set方法给所包含对象赋值。

38、属于右值的是()

b+c的返回值

字符串"hello world"

int func()的返回值

lambda表达式

39、关于stl中vector的说法错误的是()

当空间大小不足时,新分配的空间大小为原空间大小的2倍

40、set与hash_set的区别

都可以自动进行排序

41、map插入方式有几种?

用insert函数插入value_type数据

用insert函数插入pair数据

用数组方式插入数据

在insert函数中使用make_pair()函数

42、map[]与find的区别

map[]访问的元素不存在时会插入一个默认值并返回

43、野指针时怎么产生的

指针p被free或者delete之后,没有置为nullptr

指针操作超越了变量的作用范围

指针变量没有被初始化

44、const与#define的区别

const定义的常量是变量带类型,而#define定义的只是个常数不带类型

const不能重定义,而define可以通过#undef取消某个符号的定义,进行重定义

define预处理后,占用代码段空间,const占用数据段空间

define只是简单的字符串替换没有类型检查。而const是有数据类型的,是要进行判断的,可以避免一些低级错误;

define只在预处理阶段起作用,简单的文本替换,而const在编译、链接过程中起作用;

45、lambda函数说法错误的是()

不需要返回值

46、模板的说法正确的是()

模板的声明和实现必须放在h文件中

47、如何禁止隐式转换()

explicit

48、如何禁止被继承()

基类定义为final类

基类构造函数定义为private

49、父类指针所指向的对象如何安全转换为子类对象

dynamic_cast

50、c++的标准流对象

cout、cin

51、关于模板函数说法正确的是()

模板函数最终会编译成多少个函数是可以确定的

使用模板函数会导致编译时间变长

52、关于模板函数的使用说法错误的是()

模板函数必须要有参数

53、关于模板类的使用说法正确的是()

模板类中可以有模板方法

全特化模板类不能单独定义

54、关于模板类特化说法错误的是()

模板类不允许进行特化

55、哪些是编译期数据()

static constexpr typedef enum

56、关于实现模板元编程中的while循环的说法正确的是()

必须借助元数据

需要有递归表达式

需要使用特化模板来中止循环

57、关于模板元编程中实现分支判断的说法正确的是()

模板特化来实现分支

模板的偏特化实现分支

58、下面代码是交换两个变量,以下代码能正确执行的是:

 template<class T>    
 void swap(T&& a, T&& b){     	
     T c = a;     	
     a = b;     	
     b = c;     
 }     

int a = 123, b = 456;

swap(move(a), move(b));

59、能指向函数 void print(int n) 的函数指针的是()

void (*pFun)(int) = print;

typedef void (*pFUN)(int);

pFUN pfun = &print;

60、能指向类成员函数,下面成员函数的函数指针的是()

class Base{
    void print(int n){}          
}

typedef void (Base::*pClassFun)(int);

pClassFun p = &Base::print;

void (Base::*pClassFun)(int) = &Base::print;

61、关于NULL和nullptr说法错误的是

c++中 NULL是((void *)0)

62、关于下面代码说法正确的是

 template<class T>     
 void print(T&& n){       
     func(n);     
 }

func(n)可能会有错误,需要std::forward(n)进行传递

63、move和forward的说法正确的是

move的返回结果是右值

64、现有如下函数: void print(int, double, float), 使用bind能够不正确转换的是()

auto f = bind(print, std::placeholders::_1);

65、关于stl中智能指针说法错误的是()

weak_ptr要lock之后就可以正常使用

66、function对象可以指向的对象是()

普通函数 仿函数 lambda表达式 类成员方法 类成员属性 类静态方法

67、计算int arr[100]中的偶数个数,使用count_if时第三个参数可以使用()

//method1:
std::count_if(arr, arr+100, [](int n){ return n%2 == 0; })	

//method2:
struct check{
    bool operator()(int n){
        return n%2==0;
    }
};
std::count_if(arr, arr+100, check());

//method3
bool check(int n){
    return n%2 == 0;
}
std::count_if(arr, arr+100, check);

//method4
bool check(int n){
    return n%2 == 0;
}
std::count_if(arr, arr+100, &check);"

68、在c++11中auto类型不能正确推导的是

auto a[] = {1, 2, 3};

69、在c++11中,代码 get(12,‘A’) 能正确编译的是()

//method1:
auto get(int a, int b) -> decltype(a + b){
	return  a + b;
}
//method2:
template <class T, class U>
auto get(T a, U b) -> decltype(a + b)
{
	return a + b;
}

70、以下add模板函数能够正确编译并且能够完美使用的是()

template <class T1, class T2>
auto add(T1 a, T2 b) -> decltype(a + b)
{
	return a + b;
}

71、关于placement new的说法正确的是()

可以在栈空间创建对象

不会申请内存,只会调用构造函数

可以在堆空间创建对象

不可以delete,而要显示调用析构

72、请问class D的大小(20字节)

class A{     	int a;     };     
class B : public A{     	int b;     };     
class C : public A{     	int c;     };     
class D: public B, public C{     	int d;     };

73、模板不定参数如何展开()

要有递归表达式

使用特化模板来中止递归

使用普通函数来中止递归

74、模板函数与普通函数的匹配优先级说法正确的是()

普通函数的优先级比模板函数高

75、请问class B的大小(24字节)

class A{     	int a;     };     
class B : virtual public A{     	double b;     };

76、请问class D的大小(40字节)

class A{     	int a;     };     
class B : virtual public A{     	int b;     };     
class C : virtual public A{     	int c;     };     
class D: public B, public C{     	int d;     };     

77、纯虚类和纯虚函数说法正确的是

有纯虚函数的类就是纯虚类

纯虚类的子类也可以是纯虚类

78、防止类被外部实例化的方式有哪些

删除默认构造函数

将构造函数定义为非公有

定义一个无用的纯虚函数

79、关于异常的说法错误的是()

自定义异常必须继承自std::exception类

80、有以下类,obj是A类对象,obj的地址为0x7ffdaf91d6bc,请问成员属性c的地址是多少(0x7ffdaf91d6c4)

struct A{       int a;       short b;       int c;     };

81、有以下类,obj是A类对象,obj的地址为0x7ffe86fe18b0,请问成员属性c的地址是多少(0x7ffe86fe18c0)

struct A{       virtual ~A(){}       int a;       short b;       int c;     };     

82、对于派生类的构造函数,在定义对象时构造函数的执行顺序为?

1 :基类的构造函数 2 :成员对象的构造函数 3 :派生类本身的构造函数

83、如果n的地址为0x7ffe0ecd138c,以下代码会输出什么()

int n = 1;       
cout << "address 1 =  " << &n << endl;       
cout << "address 2 =  " << &(n++) << endl;       
cout << "address 3 =  " << &(++n) << endl; 

编译错误,无法对n++取地址

84、以下代码输出信息()

struct A{       
    void* operator new(size_t  sz){        
        void* o = malloc(sz);        
        cout << "1";        
        return o;       
    }       
    A(){         cout << "2"  << endl;       }       
    A(int a, int b){         cout << "3"  << endl;       }     
};          
int main(int argc, char const *argv[])     {       
    A* p = new A();       
    return 0;     
}

12

85、能够正确初始化A对象的有哪些()

struct A{       
    A(){ }       
    A(int a, int b){ }     
};
int main(){
    A p = {1, 2};	//可以
    A p{1, 2};	//可以
    A* p = new A{1,2};	//可以
    A* p = new A{};	//可以
    A p{}; //可以
}

86、关于封装,下列说法中不正确的是()

通过封装,对象的属性都是不可见的

87、假设A为一个类,那么A的正确的拷贝构造函数的原型声明是()

A(const A& a);

88、假设A为一个类,那么A的正确的移动构造函数的原型声明是()

A(A&& a);

89、c++中用memset来对类对象清零说法正确的是()

会清空虚函数表

90、 int (*s[10])(int) 表示的是什么()

可以指向int func(int)函数数组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值