笔试题目(牛客)
在C、C++中,用户标识符:
由字母、数字、下划线“_”组成
首字符不能是数字
不能是关键字
有长度限制,具体由编译器决定
严格区分大小写
1. 构造函数不能为 virtual, 构造函数不能继承; 2. 如果子类不显式调用父类的构造函数,编译器会自动调用父类的【无参构造函数】; 在C++中,派生类把基类中所有的成员继承过来,除了构造函数和析构函数。 友元函数不属于类,它只是给类开了一个后门 本来类外不可以访问类的私有成员,通过友元函数就可以 所以不能继承。子类继承父类,那么默认的,就是继承了父类的成员函数和成员变量。 初始化子类时,会先自动调用父类的构造函数。然后才调用子类的构造函数 析构时,按相反顺序进行。 构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程。不能继承,由他们的功能决定。
char(1),int(4),float(4),double(8),long(8)
析构函数没有参数,没有返回值,固定格式: “~类名()”
首先经过a++,a变成了3;
p1是指向a的地址的,因此 *p1就是a的值,即为3;
p2是指向p1的地址的,因此*p2就是p1的值,即a的地址,那么**p2就是a的值,也就是3
auto 变量类型推演,
register 建议编译器将该变量放入cpu,
static 静态变量,
extern 声明变量,常用于多文件需要使用同一变量时
通常情况下,变量的值是存取于内存之中,若使用CPU的寄存器,将局部变量值直接放于寄存器中,其存取速度远远高于对内存的存取速度,因此,使用cpu的寄存器可提高执行速率
%x是按十六进制输出,++*x = 26 = 0x1a
宏函数SUM只在预编译阶段做预处理工作,即只是简单地进行字符替换而已。
a += a*SUM(a,b)*b
a+= a*a+b*b
如果要得到C选项,宏函数就得这样写:
#define SUM(x, y) ((x)+(y))
若TestClass为一个类,执行“TestClass a[4],*p[5];”语句时会自动调用该类析构函数的次数是
语句“MyClass a[4]”定义了4个MyClass对象,分别为a[0],a[1],a[2],a[3],调用4次构造函数;语句“MyClass *p[5]”定义了5个指向MyClass对象的指针变量,分别为*p[0],*p[1],*p[2],*p[3],*p[4],但定义指针并没有实例化对象,所以不调用构造函数。因此,执行该语句共调用MyClass的构造函数4次.
Line (Point xp1, Point xp2):p1(xp1),p2(xp2)中使用的是传值,myp1和myp2传值给xp1,xp2时使用了两次复制构造函数.
p1(xp1),p2(xp2)又使用了两次,因此一共是四次。
这题是考关于拷贝构造函数的调用,有3种情况:
1、当用一个对象对初始化另一个对象时,系统会自动调用,如:Base b1 = b2;
2、当类对象作为实参,值传递时,系统会自动调用,如func(p1);这里会调用拷贝构造函数,按照参数的值构造一个临时对象,这个临时对象仅仅在该函数执行时存在,在函数执行结束之后,调用析构函数,引用传递和指针传递是不会调用任何构造函数的。
传值操作会调用拷贝构造函数 所以是四次,如果是传引用的话就是两次。 Line (Point &xp1, Point &xp2):p1(xp1),p2(xp2)
BSS段:通常是指用来存放程序中未初始化的全局变量的一块内存区域;
数据段:通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域,static意味着在数据段中存放变量;
代码段:通常是指用来存放 程序执行代码 的一块内存区域;
堆:存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减,这一块在程序运行前就已经确定了;
栈:栈又称堆栈, 存放程序的 局部变量 (不包括static声明的变量)。除此以外,在函数被调用时,栈用来传递参数和返回值。
友元函数 :
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
friend 类型 函数名(形式参数);
友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。
使用友元函数注意的要点:
类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。
一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。
友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。
友元函数在调用上同一般函数一样,不必通过对对象进行引用