C++Day4
[C++语法规则很多,要落实下来,得通过多敲代码来理解,看N遍不如写一次;在写代码的过程中,会碰到其它你不曾碰到过的编译问题,切记程序是调试出来的;再就是通过练习,把敲代码的速度提升上来,熟悉键盘,培养写代码的感觉]
一、简答题
-
什么是左值与右值,拷贝构造函数中的引用与const
为什么不能去掉?
相对于表达式而言,左值表示的是一个对象的身份,右值表示的是对象的值。
引用如果去掉,会导致递归调用。
const如果去掉,可能导致对引用类型的参数值产生意外修改。
-
this指针是什么? 有什么作用呢?
类的每个成员函数都有一个this指针,指向调用自己的类对象.这个指针不可改变也不可赋值.
-
必须在构造函数初始化列表中初始化有哪几种情况?
1.带有const修饰的类成员 ,如const int a ;
2.包含引用成员,如 int& p;
3.类类型的成员没有默认构造函数(就是类中的另一个类类型的成员没有默认的参数为空的构造函数):
-
静态数据成员的初始化在哪里,需要注意什么?
初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。
二、写出下面程序结果。
1、写出以下程序运行的结果。
#include <math.h>
#include <iostream>
using std::endl;
using std::endl;
class Point
{
public:
Point(int xx = 0, int yy = 0)
{
X = xx;
Y = yy;
cout << "point构造函数被调用" << endl;
}
Point(Point &p);
int GetX()
{
return X;
}
int GetY()
{
return Y;
}
private:
int X,Y;
};
Point::Point(Point &p)
{
X = p.X;
Y = p.Y;
cout << "X = " << X << " Y=" << Y << "Point拷贝构造函数被调用" << endl;
}
class Distance
{
public:
Distance(Point xp1, Point xp2);
double GetDis()
{
return dist;
}
private:
Point p1,p2;
double dist;
};
Distance::Distance(Point xp1, Point xp2)
: p1(xp1)
,p2(xp2)
{
cout << "Distance构造函数被调用" << endl;
double x = double(p1.GetX() - p2.GetX());
double y = double(p1.GetY() - p2.GetY());
dist = sqrt(x * x + y * y);
}