静态成员函数可以通过对象调用么?我的书本说不能.但是编译器可以调用..vc6.0 和vs2008

[复制链接]
查看11 | 回复5 | 2011-7-10 03:05:27 | 显示全部楼层 |阅读模式
回复

使用道具 举报

千问 | 2011-7-10 03:05:27 | 显示全部楼层
cprimer第四版399面说,可以通过作用域操作符从类直接调用static成员,或者通过对象、引用或指向该类类型对象的指针间接调用。因此回答是完全可以。
static数据成员必须在类定义体外定义,不能通过构造函数初始化,因此static型的变量b在外面定义;静态成员函数不能直接使用非static成员,但不意味着不能访问,staticvoiddisp(Samples)中通过传递进去的Sample类对象s来访问s的数据成员a是合理的;
所以上述编译无任何错误
回复

使用道具 举报

千问 | 2011-7-10 03:05:27 | 显示全部楼层
我试过了可以....书上说的不对.你试试吧我vs2008和vc6.0都可以..........我不知道什么原因导致有两种说法
回复

使用道具 举报

千问 | 2011-7-10 03:05:27 | 显示全部楼层
你的测试代码贴上来。我学习一下,我对这里也比较迷糊、谢谢!
回复

使用道具 举报

千问 | 2011-7-10 03:05:27 | 显示全部楼层
#includeiostream
usingnamespacestd;
classSample
{
inta;

public:
        Sample(intx)
        {
                a=x;
        }
        staticvoiddisp(Samples)
        {
                couts.a;
        }
        staticintb;
};
intSample::b=199;
voidmain()
{
        Samplept(3),g(4);
        coutpt.b;
        pt.disp(g);
        Sample::disp(g);
       
}
回复

使用道具 举报

千问 | 2011-7-10 03:05:27 | 显示全部楼层
我试了一下也是可以的。我也迷糊了。如果说初始化静态成员只允许使用类名,这个到还可以理解。但是外部访问类的静态成员只能通过类名来访问。这个外部什么意思?我也不懂了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行