每天一个C++小程序(求线段长度)
来源:互联网 发布:饲料配方软件 编辑:程序博客网 时间:2024/06/04 18:34
C++程序求线段长度
#include<iostream>#include<cmath>#define OK 1using 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.outPoint复制构造函数被调用Point复制构造函数被调用Point复制构造函数被调用Point复制构造函数被调用Line构造函数被调用Point复制构造函数被调用Point复制构造函数被调用Line复制构造函数被调用The length of the line is:5The 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++小程序(二)--Line,Point类 求线段
- 每天一个java小程序
- 每天一个java小程序
- 求个C语言源代码~一个简单的小程序
- 每天一个小程序(4)——顺序栈
- 每天一个小程序(6)—— 链栈
- 每天一个小程序(9)——链队
- 每天一个小程序(18)——“牛津"词典
- 每天一个C++小程序(十四)--堆排序
- 每天一个C++小程序(十五)--快速排序
- 每天一个C++小程序(十六)--线性表
- 每天一个C++小程序(十七)--矩阵链乘
- 每天一个C++小程序(十八)--插入排序
- 每天一个C++小程序(十九)--桶排序
- 每天一个c++小程序(1):快速排序
- java中Arrays.asList(T... a)注意事项
- kubernetes 概念和架构(入门)
- Spring HTTP Invoker使用介绍
- 从 http 升级到 https 过程中遇到的一些问题
- 源码包升级
- 每天一个C++小程序(求线段长度)
- Android studio NDK成长记录(二)ndk-build
- js模拟form表单提交
- SpanbleString 图片下沉解决办法
- 学习ASP.NET MVC(十)——排序
- Java 操作MongoDB 基本操作
- Android屏幕尺寸,分辨率,屏幕适配剖析
- Node.js入门简介
- 6.3、auto-exists、exists、non empty