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);
}