鼎桥c++

1、在编译过程中处理#include语句的阶段是: (B)
A、二进制代码生成
B、预编译
C、词法分析
D、语法分析

2、请问下而这段程序的输出结果是()

#include <iostream>
using namespace std;
class CParent{
public:
    CParent(){};
    virtual ~CParent(){};
public:
    virtual void Print(){
        std::cout << "1," ;
    };

};

class CSon : public CParent
{
public: 
    CSon(){};
    virtual ~CSon() {};
public:
    void Print(){
        std::cout << "2,";
    };
};
void Test1(CParent& oParent){
    oParent.Print();
}
void Test2(CParent oParent){
    oParent.Print();
}
int main() {
    CSon *p=new CSon();
    Test1(*p);//这里只是一个引用
    Test2(*p);//这里会在栈空间中重新构造CParent 对象
    delete p;
    return 0;
}
结果:
2,1,

3、关于虚函数的说法正确的是( C)
A、虚函数不能有函数体(可以有函数体)
B、虚函数在基类中可不实现,但是在派生类中必须实现(虚函数在派生类中可不实现,但是在基类中必须实现,哪怕在派生类中实现也不行,除非设置为纯虚函数
C、当一个成员函数被声明为虚函数后,其派生类的同名函数都自动成为虚函数。
D、通常,如果1个类可能被继承,构造函数和析构函数都有必要定义为虚函数。
解析:当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此在派生类重新声明该虚函数时,可以加virtual,也可以不加,但习惯上一般在每一层声明该函数时都加virtual,使程序更加清晰。如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数
参考:https://blog.csdn.net/qq_38167930/article/details/118759188
内存泄露是造成内存溢出的其中一个原因,但是内存泄露不一定会造成内存溢出。
内存溢出就是占用内存太大,超过了系统可以承受的范围;
内存泄露则是由于对程序运行分配的对象回收不及时甚至于脆没有被回收,久而久之,则在系统分配的堆空间里面产生了很多无用的引用。
构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型
析构函数可以为虚函数,而且当使用基类指针或引用来调用子类时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。
参考:https://blog.csdn.net/qq_34139994/article/details/105252837

4、下列关于类和对象的叙述中,正确的是( BCD)。
A、一个类只能有一个对象。
B、对象是类的具体实例
C、类是抽象的,对象是具体的
D、类不占用内存,对象需要占用内存

5、以下常量定义,正确的是(ABCD )
A、const char * const GREETINGS = "Hello, World!"; // OK.
B、const enum Color DEFAULT_COLOR = BLUE; // OK.
C、const int g_xxxBaseValue[4]= { 1, 2, 4,8};
D、const int VERSION = 200; // OK.
参考:https://blog.51cto.com/u_15091060/2666712

6、关于const跟宏的区别,哪些是正确的(CD )
A、宏定义在函数内部,函数作用域结束后仍可以引用,const常量只在作用域内可见
B、在编译连接时和运行时没有符号,const常量在编译和调试时(打开编译器试开关)可见
C、宏缺少类型检查,const常量有严格的类型检查
D、宏在预编译阶段展开,const常量在编译阶段处理

7、 对于名字空间(namespace)以下哪个说法正确的是: (BCD)
A、用关键字namespace定义的名字空间必须有一个显示的名字且是独一无二的。
B、名字空间是允许嵌套的
C、通过使用声明(the using-declaration)引入的元素名字会遮蔽名字相同的非局部声明。
D、表达式:a,一般表示引用全局作用域中声明的元素a

8、定义C++命名空间必须指定名字( 对 )

9、一个类的构造函数可以有多个,但析构函数只能有一个。( 对 )

10、#include机制用于将源程序片段收集在一起, 形成个完整的编译单元作为编译器的输入。( )

11、请判断下列定义是否正确。( 错 )

class Date
{
private: 
	int d,m,y;
public:
	int year()const {
	    return y++;
	};
};

解析:
1、在c++类中,有些成员函数在声明时,后面加了const,如
在这里插入图片描述
2、作用
①、提高程序可读性,可以一眼看出此函数不能修改类成员变量
②、提高程序可靠性,此函数试图修改成员变量时,编译器会通不过

12、虚函数是可以内联的,这样就可以减少函数调用的开销,提高效率。( 错 )
在这里插入图片描述
delete子类对象是一定会调用父类的析构函数的。先调用子类的析构函数然后调用父类的析构函数;如果要调用父类指向子类的对象,此时才需要父类的析构函数是虚的。
父类的析构函数定义成虚函数,保证父类指针指向子类对象,析构时会调用子类的析构函数

内联是编译时刻决定的,而虚函数是运行时刻动态的决定执行哪段代码,所以虚函数不可能在为内联函数。虽然在虚函数前面加上inline不会报错,但会被忽略,不会被处理成内联。

虽然静态函数不存在this指针,但是还是不能声明同名同参的静态函数和虚函数。

13、友元(friend)没有破坏类的封装。( 错 )

14、如果子类没有定义构造方法,则调用父类的无参数的构造方法,否则不调用父类无参构造函数。( 错 )
解析:会一直调用父类构造函数。

15、请阅读如下描述,对于指针运算描述是否正确?( 对)
如果两个指针p和q,指向同数组,则他们可以进行关系运算,例如p<q, p!= q,指针可以做减法运算,指针可以同整数相加减。
参考:https://blog.csdn.net/weixin_38239856/article/details/70568302

16、二叉树的前序、中序、后序遍历常用递归方式实现。( 对 )

17、类的析构函数可以是虚函数,但构造函数不可以。(对)

18、两个数组的交集。重复的也会显示。

19、实现loopMove函数,字符串循环右移。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值