读书人

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

发布时间: 2012-04-12 15:46:35 作者: rapoo

关于类的封装性的问题
[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(); }
[解决办法]
总结一下:

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

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

读书人网 >C++

热点推荐