我来试试,错误之处,还请高手、版主指正:)
说明:
1。红批表示错误之处,蓝批表示修正。
double firstLength;
double totalLength;
…… // 相关处理
if (firstLength == totalLength) //两个浮点数不能用==表判断,因为其有精度误差。
{
// doSomething
}
2. 以下代码存在什么问题,为什么,如何改善。
double CalArea()
{
return this.m_dRadius * this.m_dRadius * 3.1415; //this->m_dRadious*this->m_dRadius,this 是指针
}
double CalLength()
{
return this.m_dRadius * 2 * 3.1415; //同上题
}
3. 请说明C/C++中指针与引用的差别。
C++新加入引用特性,主要是用于参数传递,它能和指针一样达到相同的效果。
差别:
(1)定义函数时的形参不同:
指针:Type fun(Type *point);
引用:Type fun(Type &ref);
(2) 函数调用时传递的参数不同:
指针:
Type *point;
fun(point);
引用:
Type ref;
fun(ref);
(3) 指针传递的是地址,引用传递的是实参的别名。
4. 请举例说明语言中精度遗失是如何产生的。
这道题请高手指点。
5. 请说明分支语句的差别,如C语言中的if…else if…与switch的差别。(或可说明其它语言中的分支语句比较)。
主要是在分支比较多时,用if....else if....else..比较繁锁,面用switch则比较简单清晰。
6. 请明for、while、do while的差别及应用场合。
编程多了,自然明白。
7. C/C++中,continue与break有何妙用?
没什么妙用,只是结束循环的两种方法。
continue:跳出当前循环。
break:跳出所有循环。
8. 说明对C++中inline的理解,及使用时应该注意的事项。
这是C++特有的,用来取代C中的宏定义,除了assert宏。
用于inline的函数,函数要比较简单,函数体中不能有多重循环、递归等。。
9. 说明你的编程习惯、编程规范,受什么人或书的影响。
10. C++中,默认构造函数、拷贝构造函数、重载操作符=、析构函数有何差别?使用时要注意什么?
它们本来就各不相同,各自的功用也是不同的。
默认构造函数可以由系统提供,也可以自己写,有两种默认构造函数:
class A
{
};
(1)无参数的默认构造函数:
A() {};
(2)有参数的默认构造函数:
A(int a=0, int b=0) {}
注:两种默认构造函数不能同时出现。
拷贝构造函数:
拷贝构造函数是为了声明对象时用另一对象初始化。
class A
{
public:
A() {}
~A() {}
A(A &a) {};
};
int main ()
{
A a;
A b(a); //调用A(A &a)
return 0;
}
重载操作符=:
用于对象给对象赋值。
析构函数:
析放对象资源。
11. C++中的this、Java中的this、VB中的Me,如何使用?
12. C++中的多态性如何实现,并用代码说明。
C++中的多态主要由函数重载、虚函数来体现。
举个简单例子:
求各种形状的面积:
class Shape
{
public:
Shape() {};
virtual ~Shape() {}
virtual double area() const = 0;
};
class Point
{
public:
Point(double x0=0.0, double y0=0.0) : x(x0), y(y0){}
~Point() {}
double GetX() {return x;}
double GetY() {return y;}
private:
double x;
double y;
};
class Circle : public Shape
{
public:
Circle(Point cen, double ran=0.0) : m_cen(cen), m_ran(ran) {}
~Circle() {}
virtual double area() const
{
return PI*m_ran*m_ran;
}
private:
double m_ran;
double m_cen
};
class Rectangle : public Shape
{
public:
Rectangle(Point lt, Point rd) : m_lt(lt), m_rd(rd) {}
~Rectangle() {}
virtual double area() const
{
return (m_rd.GetX-m_lt.GetX) * (m_rd.GetY-m_lt.GetY);
}
private:
Point m_lt;
Point m_rd;
};
void ShowArea(Shape &s)
{
cout << "the area is: " << s.area() << endl;
}
int main()
{
Circle circle(Point(10, 10), 10);
ShowArea(circle);
Rectangle rect(Point(5, 5), Point(10, 10));
ShowArea(rect);
return 0;
}
注:用统一的接口area(),通过虚函数机制,计算各种不同形状的面积。。
13. C++中关键词const的用法。
const的用法比较多,如:
(1)定义常量
1)const int ia = 100;
2)int const ib = 100;
注:1),2)表示同一意思
3)const int *pa; //const修饰指针值
4)int* const pb; //const修饰指针
....
(2)修饰函数参数、返回值等,被const修饰的东西,受强制保护,可防止意外改动,提高程序的健壮性。
class A
{
};
1)Type fun() const; //只能用于类的成员函数
2)Type fun(const A &a);
3)Type fun(const A *a);
....
注:传递类对象,一般用引用,不用指针
14. C/C++中,几个判断:bool、float、指针变量与“零值”的比较,如何使用,要注意什么。
从提高程序的可读性和健壮性来看,以下方式应该是比较好的表达:
bool:
bool ba = false;
if (ba) // if (!ba)
{
....
}
float:
float fa = 100.111;
if (fa > 10.22221 && fa < 200.24124)
{
}
指针:
int ib = 100;
int *p = &ib;
if (p == NULL) // if (p != NULL)
{
.....
}
请说明C中的Struct与C++中的class的访问权限的差异,为什么这样设计?
struct中数数据在默认情况下是public, 而类是private.
因为struct中没在成员函数,在程序中只能直接对数据进行操作,所以指定为public更方便。
而类就不同了,它对数据是进行保护的,用成员函数对数据进行操作,所以指定private更安全。