注册 登录
编程论坛 C++教室

关于静态变量和常量的运用

lindayanglong 发布于 2008-09-10 17:19, 2121 次点击
关于静态变量和常量的运用,帮忙看看下面这个程序有什么问题?我只知道 如果设置了静态成员变量,则一定要给静态成员变量赋初值,而且在类外设置。那么静态常量 和常量又该怎么用呢?下面的程序又该怎么改?错误主要就在static const int inity=1970;上   请指教
#include<iostream>
using namespace std;
class year
{
public:
    year(){y=inity;}
    int year2()const  //常成员函数只能返回值,不能修改数据成员的值
    { return y;}
    void addyear(int i){y=year()+i;}


private:
    int y;
    static const int inity=1970;
};

void main()
{
    year y1;
    year *const py1=new year();
    y1.addyear(1);
    py1->addyear(2);
    cout<<y1.year2()<<" "<<py1->year2()<<endl;
}
13 回复
#2
清枫流影2008-09-10 18:30
VC6不支持static const。
#3
守鹤2008-09-10 18:43
这个问题。首先,在类中定义好这个静态变量,然后在类外在对静态变量赋值。
例:
class  A
{
     static  float e;
 };

float  A::e=23;
#4
守鹤2008-09-10 18:45
再说明一下,static与const不能同时使用
它们都是内部变量,但const不能改变变量的值
static可以
#5
中学者2008-09-10 18:48
static 和const可以在类中同时用,被作为编译期常量...
#6
blueboy820062008-09-10 18:50
问题在于static const int inity=1970;
static 和 const 真不能同时使用?? 我很迷惑...
#7
blueboy820062008-09-10 18:53
顶6楼啊,我说呢...我也学过这种用法啊...
我想LZ 的问题是:没有在类外再次定义const static数据成员吧,尽管它已经初始化了,但语法上还要求在类外再次定义它!
#8
lindayanglong2008-09-11 11:29
谢谢各位, 我还是改不对,请高手帮个忙,看看具体怎么改?
#9
blueboy820062008-09-11 12:32
那这样写你觉得怎么样??
至于功能上的问题,你再自己解决...

#include<iostream>
using namespace std;
class year
{
public:
    year(){}
    int year2()const  //常成员函数只能返回值,不能修改数据成员的值
    { return y;}
    void addyear(int i){/*y=year()+i;*/} //这里你写得有问题吧...
private:
    int y;
    static const int inity;
};
const int year::inity=1970;
void main()
{
    year y1;
    year *const py1=new year();
    y1.addyear(1);
    py1->addyear(2);
    cout<<y1.year2()<<" "<<py1->year2()<<endl;
}
#10
newyj2008-09-11 20:18
什么是编译期常量 呢?
#11
blueboy820062008-09-11 20:28
回复 11# newyj 的帖子
[bo]编译期常量:[/bo]
比如:
#define MAX 100

这个 MAX 就是编译期常量,没有对应的内存空间,
在编译时候,所有的 MAX 都被 100 这个值代替

[bo]运行期常量: [/bo]
比如:
const int x=100;

就是一个运行期常量,分配内存空间,
但是其值不允许改变
#12
newyj2008-09-11 20:54
哦 谢谢楼上的热心回答了
学习了
#13
lindayanglong2008-09-28 16:01
改为void addyear(int i){y=y+i;}就对了 谢谢大家
1