现在的位置: 首页 > 综合 > 正文

把字符串转换成浮点数并体现 c++类中的const和static的用法

2013年08月27日 ⁄ 综合 ⁄ 共 1808字 ⁄ 字号 评论关闭

//程序很简单,相信大家都会,也会比好写的好。我写的很烂.........................

//不过有几个地方相信初学者,刚开始学习跟我一样有点迷糊。

#include<iostream>
using namespace std;
const int SIZE=15; 
class point
{
private:
 const int size;   //这里在类的私有数据中定义了常量
 char *pf;
 int d;
    long  zs,suz;  
 long double xs,sus;
   
 static long h;                      //这里定义了静态数据
 static long double r;

 bool fund() //查找小数点并查看字符串是否包含非法字符
 {
  for(int i=0;i<size;i++)
  {
   if(pf[i]<='9'&&pf[i]>='0'||pf[i]=='.')
   {
    if(pf[i]=='.') d=i;
       else if(i==size-1) return true;
   }
   else return false;
  }
 }

 void funz()  //把小数点前的转换成数字并相加
 {
  
  for(int i=d-1;i>=0;i--)
  {
   zs=(pf[i]-'0')*h;
   suz+=zs;
   h*=10;
  }
 }
 void funx()// 把小数点后的部分转换并相加
 {

  for(int i=d+1;i<size;i++)
  {
   xs=(pf[i]-'0')*r;
   sus+=xs;
   r*=0.1;
  }
 }
 long double funh()  //判断是否有异常,并返回计算结果
 {
  cout.setf(ios_base::fixed,ios_base::floatfield);   //采用定点输出,也就是不让c++在double值到百万位是自动转换成e格式。
  cout.precision(4);                                                     //保留4位小数
 if(fund())
 {
  if(d==0)
  {
      d=size;
   funz();
  }
  else
  {
      funz();
            funx();
  }
      return suz+sus;
  }
  else
  {
   cout<<"有非法字符";exit(1);
  }
 }
public:
 point(char *pt=0):pf(new char[strlen(pt)+1]),size(strlen(pt))  //这里采用了成员初始化列表的句法
 {
  d=0;
  zs=suz=0;
  xs=sus=0.0;
        strcpy(pf,pt);
 }
   friend  ostream& operator<<(ostream& os, point& shzi)
   {
    os<<shzi.funh();
    return os;
   }

~point() { delete[]pf; }
};
long point::h=1;             //这里初始化了静态成员变量 ,
long double point::r=0.1;
int main()

    char str[SIZE];
    cin.get(str,SIZE-1);
 str[SIZE-1]=0;
 while(cin.get()!='/n')continue;
 cin.clear();
    point wyz(str);
    cout<<wyz;
 return 0;
}
 

        不能在类声名中初始化静态成员变量,这是因为声名描述了如何分配内存,但并不分配内存。但可以使用这种格式来创建对象,从而分配和初始化内存。

对于静态成员可以在类声名之外使用单独语句初始化,这是因为静态类成员是单独存储的,而不是对象的组成部分。请注意,初始化语句指出类型,并使用了作用域操作符。

        对于不能在类声名中初始化静态数据成员的一种例外情况是,静态数据成员为整型或枚举型const。

.................

成员初始化列表的句法只能用于构造函数。

必须用这种格式初始化非静态const数据成员。

必须用这种格式初始化引用数据成员。

抱歉!评论已关闭.