| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8027 人关注过本帖
标题:static成员能否被继承?
只看楼主 加入收藏
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
 问题点数:0 回复次数:21 
static成员能否被继承?
如题!
搜索更多相关主题的帖子: static 成员 继承 
2008-06-06 17:05
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 

樱花大战,  有爱.
2008-06-06 19:26
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# newyj 的帖子
如果再加上private,肯定不行...

static变量和方法只能用类名来访问。
2008-06-06 21:06
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
试验下就知道了

Fight  to win  or  die...
2008-06-07 05:00
CPlusPlusheart
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-4
收藏
得分:0 
能能能能
2008-06-07 08:16
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
For example:
#include <iostream>
using namespace std;

class Base
{
   public:
   static int a;
   static void Fun( )
   {
       cout<<"静态成员函数可以被继承!"<<endl;
   }
};
int Base::a=1000;

class Derived:public Base
{

};
int main(void)
{
  cout <<"静态数据成员可以被继承!  "<<Derived::a<<endl;
  Derived::Fun( );
  system("pause");
  return 0;
}

i like linux...
2008-06-07 15:37
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
谢谢各位的回答!
2008-06-07 17:19
janevans
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-12-12
收藏
得分:0 
static继承下来的,从基类到派生类只保存一份数据,,是共享的,通常用来基类和派生类之间的联系
2008-06-09 15:06
东方印
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-11-11
收藏
得分:0 
请问3# Ethip
[bo][un]Ethip[/un] 在 2008-6-6 21:06 的发言:[/bo]

如果再加上private,肯定不行...

static变量和方法只能用类名来访问。

staitc变量和方法为什么只能用类名来访问?虽然这种变量和方法是独立存在的,即没有和具体实例进行绑定,但也是允许通过实例名来访问的。
2008-06-09 20:21
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
我发现个现象。在main函数外面初始化Base的私有成员变量a是可以的。比如:



#include <iostream>
using namespace std;

class Base
{
private:
    static int a;
public:

    static void Fun( )
    {
        cout<<"静态成员函数可以被继承!"<<endl;
        a++;
        cout<<"第"<<a<<"次被调用"<<endl;
    }
};


class Derived:public Base
{
    
};

int Base::a=0; //比如这个样子

int main(int argc, char* argv[])
{

 
    int b=1;
    
    while (b)
    {
        
        Derived::Fun( );
        cout <<"是否继续?退出输入0  "<<endl;
        cin>>b;
    }
    
    
    return 0;

}

但是在main函数里面初始化基类的静态成员函数却不可以。比如:
#include "stdafx.h"

#include <iostream>
using namespace std;

class CbaseClass
{
private:
    static int a;
public:

    static void Fun( )
    {
        cout<<"静态成员函数可以被继承!"<<endl;
        a++;
        cout<<"第"<<a<<"次被调用"<<endl;
    }
};


class CDerived:public CbaseClass
{
    
};


int main(int argc, char* argv[])
{

         CbaseClass::a=0; //在主函数这里初始化,编译是没有问题的,但却在连接时出错。

    int b=1;
    
    while (b)
    {
        
        CDerived::Fun( );
        cout <<"是否继续?退出输入0  "<<endl;
        cin>>b;
    }
    
    
    return 0;

}

这是为什么呢?

我用的编译器是VC6 with sp6
错误信息是:
error LNK2001: unresolved external symbol "public: static int CbaseClass::a" (?a@CbaseClass@@2HA)
[[it] 本帖最后由 VanHorn 于 2008-6-9 21:11 编辑 [/it]]

[[it] 本帖最后由 VanHorn 于 2008-6-9 21:14 编辑 [/it]]

我用VC++6我怕谁?
2008-06-09 20:48
快速回复:static成员能否被继承?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023918 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved