为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码里面的const代码都有什么作用?求解释~

这段代码里面的const代码都有什么作用?求解释~

C++ C
白衣染霜花 2021-11-25 21:15:40
#include<iostream>using namespace std;#include<math.h>const double pi=3.1415926;class Shape{public:virtual void Display()=0;virtual double Area() const=0;virtual double Volume() const=0;void Disp();virtual ~Shape(){};};class Sphere:public Shape //球体{public:Sphere(double r=0.0){radius=r;}void Display();double Area() const;double Volume() const;virtual ~Sphere(){};private:double radius;};class Cuboid:public Shape //长方体{public:Cuboid(double l=0.0,double w=0.0,double h=0.0){length=l;width=w;heigth=h;}void Display();double Area() const;double Volume() const;virtual ~Cuboid(){};private:double length;double width;double heigth;};class Cylinder:public Shape //圆柱体{public:Cylinder(double r=0.0,double h=0.0){radius=r;heigth=h;}void Display();double Area() const;double Volume()const;virtual ~Cylinder(){};private:double radius;double heigth;};void Shape::Disp() //输出表面积和体积{cout<<"表面积="<<Area()<<endl;cout<<"体积="<<Volume()<<endl;}void Sphere::Display(){cout<<"球半径="<<radius<<endl;}double Sphere::Area() const //球体表面积{ double a;a=4.0*pi*radius*radius;return a;}double Sphere::Volume() const //球体体积{ double a;a=4.0/3.0*pi*pow(radius,3.0);return a;}void Cuboid::Display(){cout<<"长方体长"<<length<<",宽"<<width<<",高"<<heigth<<endl;}double Cuboid::Area() const //长方体表面积{ double a;a=2.0*(length*width+width*heigth+heigth*length);return a;}double Cuboid::Volume() const //长方体体积{ double a;a=length*width*heigth;return a;}void Cylinder::Display(){cout<<"圆柱体半径"<<radius<<",高"<<heigth<<endl;}double Cylinder::Area() const //圆柱体表面积{ double a;a=2.0*pi*radius*(radius+heigth);return a;}double Cylinder::Volume() const //圆柱体体积{double a;a=pi*radius*radius*heigth;return a;}#include "test.h"int main(){int i;Shape *ptrs[3];ptrs[0]=new Sphere(10);ptrs[1]=new Cuboid(12.5,5,2.5);ptrs[2]=new Cylinder(10,10);for(i=0;i<3;i++){ptrs[i]->Display();ptrs[i]->Disp();}system("pause");return 0;}
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

首先:

1const double pi=3.1415926;

这个表明pi是个常量。就是不能改变的量。和

1#define pi 3.1415926

差不多,只是比define更安全。const是C++的风格。

----------------------

另外:


 virtual double Area() const=0; virtual double Volume() const=0;

这定义了Area()和Volume()是常成员函数。

(说句题外话,后面的“=0”表明它俩都是纯虚函数。)

常成员函数有啥特点呢?呵呵,

常成员函数不能更新类的成员变量(如它俩都不能更新radius的值),也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数(如它俩可以相互调用,却不能调用其他的成员函数)。

还有:

const是函数类型的一部分,在实现部分也要带该关键字。

所以你可以看到,在下面的代码中,声明他们的时候,都带上了const.

还有疑问么?请追问。



查看完整回答
反对 回复 2021-11-29
?
不负相思意

TA贡献1777条经验 获得超10个赞

const就是不可修改的意思呗。。。
1、
因为除了初始化的时候有赋值,之后不允许改变,所以叫常量了。
2、
通常在定义函数时形参都定义成const类似比较多,目的就是防止在传指针或者引用时,错误地修改了原先的数据。// void do_nothing(const string& str);
3、
还有就是函数的返回值有用const修饰的,一般来说也都是返回引用或指针比较多,目的都是一样的,不允许其他接口去直接修改该内容;// const kind_of_class* get_this_kind_of_class();
4、
上面都是做前缀的,再者就是成员函数后面做后缀的;意思就是该函数不修改本class内的任何成员变量;// int just_get_some_class_info() const;
差不多工作中常用的就这些个吧。

 


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信