10道C++输出易错笔试题收集
作者:网络转载 发布时间:[ 2015/1/5 11:16:38 ] 推荐标签:C++ net
如果将unsigned去掉,则输出0x7。
静态对象是否调用构造函数?
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "A's Constructor Called " << endl; }
};
class B
{
static A a;
public:
B() { cout << "B's Constructor Called " << endl; }
};
int main()
{
B b;
return 0;
}
|
输出:
B's Constructor Called
解释:上面的程序只是调用了B的构造函数,没有调用A的构造函数。因为静态成员变量只是在类中声明,没有定义。静态成员变量必须在类外使用作用域标识符显式定义。
如果我们没有显式定义静态成员变量a,试图访问它,编译会出错,比如下面的程序编译出错:
#include <iostream>
using namespace std;
class A
{
int x;
public:
A() { cout << "A's constructor called " << endl; }
};
class B
{
static A a;
public:
B() { cout << "B's constructor called " << endl; }
static A getA() { return a; }
};
int main()
{
B b;
A a = b.getA();
return 0;
}
|
输出:
Compiler Error: undefined reference to `B::a
如果我们加上a的定义,那么上面的程序可以正常运行,
注意:如果A是个空类,没有数据成员x,则算B中的a未定义也还是能运行成功的,即可以访问A。
#include <iostream>
using namespace std;
class A
{
int x;
public:
A() { cout << "A's constructor called " << endl; }
};
class B
{
static A a;
public:
B() { cout << "B's constructor called " << endl; }
static A getA() { return a; }
};
A B::a; // definition of a
int main()
{
B b1, b2, b3;
A a = b1.getA();
return 0;
}
|
输出:
A's constructor called
B's constructor called
B's constructor called
B's constructor called
上面的程序调用B的构造函数3次,但是只调用A的构造函数一次,因为静态成员变量被所有对象共享,这也是它被称为类变量的原因。同时,静态成员变量也可以通过类名直接访问,比如下面的程序没有通过任何类对象访问,只是通过类访问a。
int main()
{
// static member 'a' is accessed without any object of B
A a = B::getA();
return 0;
}
输出:
A's constructor called
union问题
#include <stdio.h>
union
{
int i;
char x[2];
}a;
int main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
return 0;
}
|
输出:266,自己画个内存结构图知道了,注意union的存放顺序是所有成员都从低地址开始存放。Union的大小为其内部所有变量的大值,并且按照类型大值的整数倍进行内存对齐。
下面代码会报错吗?为什么?
class A {
public:
int m;
void print() { cout << "A
"; }
};
A *pa = 0;
pa->print();
答案:正常输出。上面的代码可以这样理解(这非常重要):
void print(A *this) { cout << "A
"; }
A *pa = 0;
print_A();
也是:并不是类没有初始化不能调用类的成员函数,如果成员函数只是简单的打印个东西,没有调用类成员啥的不会报段错误。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11