关于类的封装性的问题
[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();
}
[解决办法]
用静态成员:
#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(); }
[解决办法]
总结一下:
对于类中的非静态常量,初始化是在构造函数的初始化列表
对于类中的静态常量,初始化在类体外!~