牛客错题整理——C++

1.运行下图中代码,输出的结果是什么?这段代码有什么问题?

c 复制代码
class A
{
public:
        A()
        {       std::cout << "A is created." << std::endl;        }
 
        ~A()
        {       std::cout << "A is deleted." << std::endl;        }
};
 
class B : public A
{
public:
        B()
        {       std::cout << "B is created." << std::endl;        }
 
        ~B()
        {       std::cout << "B is deleted." << std::endl;        }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
        A* pA = new B();
        delete pA;
        return 0;
}

答案为输出三行,分别是:A is created. B is created. A is deleted。

用new创建B时,回调用B的构造函数。在调用B的构造函数的时候,会先调用A的构造函数。因此先输出A is created. B is created.接下来运行delete语句时,会调用析构函数。由于pA被声明成类型A的指针,同时基类A的析构函数没有标上virtual,因此只有A的析构函数被调用到,而不会调用B的析构函数。因而我们通常规定:继承体系中的析构函数应当为虚函数,以此保证所有构建的实体均能够正常析构。

2.下列关于静态变量与对象变量的说法中错误的是()

A.静态方法可以调用静态变量

B.静态方法可以调用对象变量

C.成员方法(非静态method)可以调用静态变量

D.成员方法(非静态 method)可以调用对象变量

答案为B

A. 静态方法可以调用静态变量 - 这是正确的。静态方法是属于类的,而不是属于对象的,因此它只能访问静态变量,这些变量也是属于类的,而不是属于任何特定对象的。

B. 静态方法可以调用对象变量 - 这是错误的。静态方法不能访问非静态的成员变量(即对象变量),因为这些变量是属于对象的,而不是属于类的。在静态方法中访问非静态成员变量会导致编译错误,因为静态方法不依赖于任何特定的对象实例。

C. 成员方法(非静态method)可以调用静态变量 - 这是正确的。非静态方法(成员方法)可以访问静态变量,因为静态变量是类的成员,可以在类的任何方法(包括静态和非静态方法)中访问。

D. 成员方法(非静态 method)可以调用对象变量 - 这也是正确的。非静态方法是与对象实例关联的,因此它们可以访问和修改对象的成员变量(即对象变量)。

3.下述静态成员的特性中,()是错误的:

A 静态成员函数不能利用 this 推针

B.静态数据变量要在类体外进行初始化

C.静态数据变量既可以通过对象名访间。也可以通过类名来访问

D 静态数据成员只有静态的对象才能访问

答案为D

A 静态成员函数不能利用 this 指针

这是正确的。静态成员函数是属于类的,而不是属于类的某个对象。因此,它们没有与特定对象关联的 this 指针。静态成员函数只能访问静态成员变量和其他静态成员函数,因为它们不依赖于任何对象实例。

B 静态数据变量要在类体外进行初始化

这也是正确的。在C++中,静态数据成员(无论是整型、浮点型还是其他类型)都必须在类定义之外进行初始化。这是因为静态数据成员是与类本身关联的,而不是与类的任何特定对象关联的。因此,它们的初始化不能在类的构造函数中完成,而必须在类定义之外进行。

C 静态数据变量既可以通过对象名访问,也可以通过类名来访问

这同样是正确的。静态数据成员属于类本身,因此它们可以通过类名直接访问。但是,由于它们也是类的成员,因此也可以通过类的对象来访问。不过,通过对象访问静态成员通常是不推荐的,因为这可能会导致混淆。

D 静态数据成员只有静态的对象才能访问

这是不正确的。静态数据成员是类的成员,而不是特定对象的成员。因此,它们可以通过类名或任何类的对象来访问,而不仅仅是静态对象。

4.以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:

A 如果变量bVar是布尔类型:if(false == bVar)doSomeThing();

B 如果变量nVar是int型:if(0 == nVar)doSomeThing();

C 如果变量fVar为浮点型:if(0.02 == fVar){doSomeThing();}

D 如果变量sVar为字符串型:if(""== sVar){doSomeThing();}

答案为 C错

注意是0.02=fVar,应该是==,如果忽略这个,那么两个浮点数比较也是有问题的,应该指定一个误差

5.则a[q - p] = ?

c 复制代码
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
int *p, *q;
p = a;
q = &a[2];

答案为 2

这里q-p的实际运算是:(q的地址值-p的地址值)/sizeof(int),所以为2.

6.有以下定义语句 double a,b; int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是()

c 复制代码
A a=a+b=b++
B w%(int)(a+b)
C (c+w)%(int)a
D w=a==b;

答案为 BC

D不是表达式,是语句

7.则a[q - p] = ?

c 复制代码
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
int *p, *q;
p = a;
q = &a[2];

答案为 2

这里q-p的实际运算是:(q的地址值-p的地址值)/sizeof(int),所以为2.

相关推荐
忆源25 分钟前
【Qt】之音视频编程1:QtAV的背景和安装篇
开发语言·qt·音视频
敲键盘的小夜猫28 分钟前
Python核心数据类型全解析:字符串、列表、元组、字典与集合
开发语言·python
李匠202432 分钟前
C++GO语言微服务之图片、短信验证码生成及存储
开发语言·c++·微服务·golang
IT猿手2 小时前
基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
神经网络·算法·matlab·人机交互·无人机·强化学习·无人机三维路径规划
是孑然呀3 小时前
【小记】word批量生成准考证
笔记·学习·excel
巨龙之路4 小时前
C语言中的assert
c语言·开发语言
2301_776681654 小时前
【用「概率思维」重新理解生活】
开发语言·人工智能·自然语言处理
熊大如如5 小时前
Java 反射
java·开发语言
万能程序员-传康Kk5 小时前
旅游推荐数据分析可视化系统算法
算法·数据分析·旅游
PXM的算法星球5 小时前
【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
算法