每天一个C++小程序(求线段长度)
2017-03-02 17:44
585 查看
C++程序求线段长度
#include<iostream> #include<cmath> #define OK 1 using namespace std; class Point { public: Point(int xx = 0, int yy = 0) { x = xx; y = yy;} Point(Point &p);//复制函数 ~Point() {}; int getX() { return x; } int getY() { return y; } private: int x; int y; }; //复制函数的实现 Point::Point(Point &p) { x = p.x; y = p.y; cout<<"Point复制构造函数被调用"<<endl; } //类的组合 class Line { public: Line(Point xp1, Point xp2);//构造函数 Line(Line &l);//复制函数 ~Line() {}; void setLen(); double getLen() { return len; } private: Point p1; Point p2; double len; }; void Line::setLen() { double x = double(p1.getX() - p2.getX()); double y = double(p1.getY() - p2.getY()); len = sqrt(x*x + y*y); } //组合类的构造函数 Line::Line(Point xp1, Point xp2):p1(xp1),p2(xp2) { cout<<"Line构造函数被调用"<<endl; setLen(); } //组合类的复制构造函数 Line::Line(Line &l):p1(l.p1),p2(l.p2) { cout<<"Line复制构造函数被调用"<<endl; len = l.len; } int main() { Point myp1(1, 1); Point 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; return OK; }运行结果:
$g++ LineLenth.cpp -o LineLenth.out $ ./LineLenth.out Point复制构造函数被调用 Point复制构造函数被调用 Point复制构造函数被调用 Point复制构造函数被调用 Line构造函数被调用 Point复制构造函数被调用 Point复制构造函数被调用 Line复制构造函数被调用 The length of the line is:5 The length of the line2 is:5
C++中冒号(:)的用法
(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{
unsigned char a:4;
unsigned char c;
} XXX;
(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。
struct _XXX{ _XXX() : y(0xc0) { } };
class MyClass { public: MyClass();//构造函数,无返回类型,可以由参数列表,这里省去 MyClass(MyClass& myClass);//复制构造函数 ~MyClass();//析构函数 private: int a; const int b; } //初始化列表 MyClass::MyClass():a(1),b(1) {} //初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。 //在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两都的差别在对于像const类 //型数据的操作上表现得尤为明显。我们知道,const类型的变量必须在定义时进行初始化,而不能对 //const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化。 MyClass::MyClass() { a = 1;//正确,效果相当于在初始化列表中进行初始化 b = 1;//出错,const变量不能进行赋值操作; }
初始化的顺序与成员变量声名的顺序相同。例如:
myClass::myClass():b(
1
),a(b) {}。
这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
(3)public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个public:或private:出现为止。private:为默认处理。
(4)类名冒号后面的是用来定义类的继承。
class 派生类名 : 继承方式 基类名 { 派生类的成员 };
继承方式:public、private和protected,默认处理是public
对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。
C++中双冒号(::)的用法
(1)表示“域操作符”。例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。
(2)直接用在全局函数前,表示是全局函数。
例:在VC里,你可以在调用API 函数里,在API函数名前加 ::。
(3)表示引用成员函数及变量,作用域成员运算符。
例:System::Math::Sqrt() 相当于System.Math.Sqrt()。
相关文章推荐
- 每天一个C++小程序(十四)--堆排序
- 每天一个C++小程序(十九)--桶排序
- 每天一个C++小程序(十五)--快速排序
- 每天一个C++小程序(十七)--矩阵链乘
- 每天一个c++小程序(1):快速排序
- 每天一个小程序(7)——C++中sort函数的应用
- 每天一个C++小程序(十八)--插入排序
- 每天一个C++小程序(求圆面积)
- 每天一个c++小程序(2):二维数组动态创建
- 每天一个C++小程序(十六)--线性表
- 每日一个C++小程序(二)--Line,Point类 求线段
- C++ 计算一个线段长度,两个端点的坐标值分别为(100,200)(200,300)。要求:定义一个CLine类,属性是CPoint对象。(初始化参数列表)
- 每天一个C++小程序(二十)--简单的飘雪程序
- 采用C++的ACE库实现的一个通用的udp通信服务器程序
- 一个程序员每天自动运行的程序
- 一个很简单C++的程序
- 一个HTTP.二进制POST和HTTP指定长度接收的C++实现
- 解答: 一个简单的c++程序
- 一个简单的C++程序反汇编解析
- 如何在VC6.0中得到一个程序的运行时间,也就是这个程序耗费的时钟周期数// C和C++的时间编程