1.下面的代码有什么问题?
struct Test
{
Test(int ) { }
Test() { }
void fun() { }
};
int main(int argc, char* argv[])
{
Test a(1);
a.fun();
Test b();
b.fun();
system("pause");
return 0;
}
编译不能通过,Test b();错误,不用加括号,Test b;就可以了。
2.下面代码有什么问题?
cout<< (true?1:"0") <<endl;
编译出错,这个三元操作符(也是C++中唯一的三元操作符)?后面的两个变量的类型要一样。
3.C++中的空类,默认产生哪些类成员函数?
class Empty
{
public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // 取址运算符 const
};
但是要注意的是,这些函数只是在需要时才会产生。
如何查看类生成了那些函数?汇编吗?
4.C++中overload、override、overwrite的区别
重载(overload)是指同一个类中,名称相同,但是参数不同的相似的函数
覆写(override)是指子类中实现了父类中virtual函数的重新定义
重写(overwrite)感觉不是C++中的概念,貌似是JAVA中的。与覆写类似,可认为是覆写父类中非virtual函数
5.定义函数指针数组
定义一个有10个指针的数组,每个指针指向一个函数,该函数有两个长整型形参并返回 一个整数。
int (*pf[10])(long int a, long int b);
复习下函数指针的概念,并引经新的概念---函数指针 数组。
学习新的知识时,最好能和以前的知识产生联系,这样能巩固以前的知识,也更便于学新的知识。
函数指针就是指向函数的指针,就像指向整数的指针一样,表示某一个函数的地址(函数就是一段代码,当然也得有一个地址)。定义方法如下:
int (*pf)(int a, int b); //函数的形参和返回值都可以换。注意包裹*pf的小括号不能去掉,去掉之后,语句就变为定义一个函数了,它的返回值为int型指针。
下面就来说说函数指针数组。函数指针数组就一个装着函数指针的数组,当然函数指针的类型要一致。定义方式如下:
double add(double a, double b);
double sub(double a, double b);
double mul(double a, double b);
double div(double a, double b);
double (*szpf[4])(double a, double b); //函数指针数组的定义
当然还有另外一种定义方式,如下:
typedef double (*szpf[])(double a, double b);
szpf pfs = {add, sub, mul, div};
还可以这样:
typedef double (*szpf)(double a, double b);
szpf pfs[10];
函数指针的用途举例:http://wenku.baidu.com/view/e2fce2e0998fcc22bcd10ded.html
又去stackoverflow上看了下,发现了指向指针函数数组的指针的定义方法,如下:
double (*(*ppFunction)[4])(double a, double b);
6.