问题(16):运行如下的C++代码,输出是什么?
class A
{
public:
virtual void Fun(int number = 10)
{
std::cout << "A::Fun with number " << number;
}
};
class B: public A
{
public:
virtual void Fun(int number = 20)
{
std::cout << "B::Fun with number " << number;
}
};
int main()
{
B b;
A &a = b;
a.Fun();
}
思路;开始一眼看出这题很基本当然 虽然是a是 A类的引用,但是确指向的是类B。这里a.Fun()由于是虚函数 通过虚函数指针在虚函数表里面找到 fun函数
所以输出B:Fun with number没有问题,但是至于函数里面的形式参数的话,我就拿不准了。
海涛日志里面分析的十分透彻,应该输出10
为什么你,涛哥里面说 因为缺省参数实在编译期间处理的,编译期间 A a是A类,但在运行中,虚函数动态的指向B类的fun函数,但是number的值为10
因此 输出
B::Fun with number 10
运行如下的C代码,输出是什么?
char* GetString1()
{
char p[] = "Hello World";
return p;
}
char* GetString2()
{
char *p = "Hello World";
return p;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("GetString1 returns: %s. \n", GetString1());
printf("GetString2 returns: %s. \n", GetString2());
return 0;
}
数组p[]为函数的局部变量,退出函数空间立即回收
*p是字符串常量存放在常量数据区,为全局的
因此 GetString1 returns:一串乱码
GetString2 returns:Hello World
问题(19):运行下图中C代码,输出的结果是什么?
int _tmain(int argc, _TCHAR* argv[])
{
char str1[] = "hello world";
char str2[] = "hello world";
char* str3 = "hello world";
char* str4 = "hello world";
if(str1 == str2)
printf("str1 and str2 are same.\n");
else
printf("str1 and str2 are not same.\n");
if(str3 == str4)
printf("str3 and str4 are same.\n");
else
printf("str3 and str4 are not same.\n");
return 0;
}
str1,str2为数组 要为其分配存储空间,当然地址不同
“hello world”为字符串常量,存放在常量数据区,当然*str3,和*str4指向的地址相同。它在内存中只有一个拷贝