首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于类的封装性的有关问题

2012-04-12 
关于类的封装性的问题[codeC/C++][/code]#include iostream.hconst double PI3.14//为了封装,这行怎

关于类的封装性的问题
[code=C/C++][/code]
#include <iostream.h>

const double PI=3.14;//为了封装,这行怎么放到类里面,如果是用设置获取函数就太麻烦了

class Circle
{
public:
Circle(double=0);
Circle(Circle &);
void print() const;
private:
double radius;
double zhouchang;
double area;
  const double PI=3.14;//当然是希望这样,可是编译器不允许,要怎么尽量接近这样的情形
};
Circle::Circle(double r)
{
radius=r;
zhouchang=2*PI*radius;
area=PI*radius*radius;
}
void Circle::print() const
{
cout<<"radius:"<<radius<<endl
<<"zhouchang:"<<zhouchang<<endl
<<"area:"<<area<<endl;
}
Circle::Circle(Circle & cir)
{
radius=cir.radius;
zhouchang=cir.zhouchang;
area=cir.area;
}

void main()
{
Circle c(1);
c.print();
}

[解决办法]
在类里面定义const成员,初始化放在构造函数初始化列表中去

[code=C/C++][/code]
#include <iostream.h> 

class Circle 

public: 
Circle(double=0); 
Circle(Circle &); 
void print() const; 
private: 
double radius; 
double zhouchang; 
double area; 
const double PI; 
}; 
Circle::Circle(double r):PI(3.14)

radius=r; 
zhouchang=2*PI*radius; 
area=PI*radius*radius; 

void Circle::print() const 

cout < <"radius:" < <radius < <endl 
< <"zhouchang:" < <zhouchang < <endl 
< <"area:" < <area < <endl; 

Circle::Circle(Circle & cir) 

radius=cir.radius; 
zhouchang=cir.zhouchang; 
area=cir.area; 


void main() 

Circle c(1); 
c.print(); 
}
[解决办法]
用静态成员:

C/C++ code
#include <iostream.h> class Circle { public:     Circle(double=0);     Circle(Circle &);     void print() const; private:     double radius;     double zhouchang;     double area;     static const double PI;}; Circle::Circle(double r) {     radius=r;     zhouchang=2*PI*radius;     area=PI*radius*radius; } void Circle::print() const {     cout <<"radius:" <<radius <<endl         <<"zhouchang:" <<zhouchang <<endl         <<"area:" <<area <<endl; } Circle::Circle(Circle & cir){     radius=cir.radius;     zhouchang=cir.zhouchang;     area=cir.area; }const double Circle::PI = 3.14;void main() {     Circle c(1);     c.print(); }
[解决办法]
总结一下:

对于类中的非静态常量,初始化是在构造函数的初始化列表

对于类中的静态常量,初始化在类体外!~

热点排行