C++ 类的相关语法,符号:和::的用法

#include <iostream>
#include <cmath>
using namespace std;

//class 派生类名 : 继承方式 基类名

//声明了一个类C,类C里声明了一个成员函数void F(),
//但没有在类的声明里给出F()的定义,那么在类外定义F()时,
//就要写成void C::F(),表示这个F()函数是类A的成员函数。

class Point
{
private:
    int X,Y;
public:
    Point(int xx=0,int yy=0)//类Point的构造函数
    {
        X=xx;
        Y=yy;
    }
    //拷贝构造函数,Point(Point &p)表示p是point类的一个对象,
    //而&p则是这个对象的引用(也就是这个对象的地址)。这是拷贝构造函数的规定,不能变。
    Point(Point &p);

    int GetX(){return X;}
    int GetY(){return Y;}
};

//表示引用成员函数及变量,作用域成员运算符
//例:System::Math::Sqrt()相当于System.Math.Sqrt()
//作用域符号::的前面一般是类名称,后面一般是该类的成员名称,
//C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分
//如:A,B表示两个类,在A,B中都有成员member。那么
//    A::member就表示类A中的成员member.
//    B::member就表示类B中的成员member.
Point::Point(Point &p)//拷贝构造函数的实现
{
    X=p.X;
    Y=p.Y;
    cout<<"Point拷贝构造函数被调用!"<<endl;
}
class Line
{
private:
    Point p1,p2;
    double len;
public:
    Line(Point xp1,Point yp2);//类Line的构造函数
    Line(Line &L);
    double GetLen(){return len;}
};

//1、初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。
//2、初始化的顺序与成员变量声名的顺序相同。
//例:class myClass
    //{
    //public :
    //  myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
    //  ~myClass();// 析构函数
    //  int a;
    //  const int b;
    //}
    //myClass::myClass():a(1),b(1)// 初始化列表
    //{
    //}
//1、
//在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。
//两都的差别在对于像const类型数据的操作上表现得尤为明显。
//我们知道,const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,
//因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,
//即下面的代码将会出错:
    //myClass::myClass()
    //{
    //  a = 1;// 没错,效果相当于在初始化列表中进行初始化
    //  b = 1;// 出错,const变量不能进行赋值操作;
    //}
//2、
    //myClass::myClass():b(1),a(b)
    //{
    //}
//这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。
//这一点是相当重要,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,
//防止出现不必要的错误。
Line::Line(Point xp1,Point yp2):p1(xp1),p2(yp2)//初始化列表
{
    cout<<"Line构造函数被调用!"<<endl;
    double x=double(p1.GetX()-p2.GetX());
    double y=double(p1.GetY()-p2.GetY());
    len=sqrt(x*x+y*y);
}
Line::Line(Line &L):p1(L.p1),p2(L.p2)
{
    cout<<"Line拷贝构造函数被调用!"<<endl;
    len=L.len;
}
void main()
{
    Point myp1(1,1),myp2(4,5);
    Line line(myp1,myp2);
    Line line2(line);
    cout<<"The Length of the line is:";
    cout<<line.GetLen()<<endl;
    cout<<"The Length of the line2 is:";
    cout<<line2.GetLen()<<endl;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值