找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1637|回复: 9

static成员能否被继承?

[复制链接]
发表于 2009-11-4 01:09:56 | 显示全部楼层 |阅读模式 IP:江苏扬州
如题!
发表于 2009-11-4 01:09:57 | 显示全部楼层 IP:江苏扬州
回复

使用道具 举报

发表于 2009-11-4 01:09:58 | 显示全部楼层 IP:江苏扬州
如果再加上private,肯定不行...

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

使用道具 举报

发表于 2009-11-4 01:09:59 | 显示全部楼层 IP:江苏扬州
试验下就知道了
回复

使用道具 举报

发表于 2009-11-4 01:10:00 | 显示全部楼层 IP:江苏扬州
能能能能
回复

使用道具 举报

发表于 2009-11-4 01:10:01 | 显示全部楼层 IP:江苏扬州
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;
}
回复

使用道具 举报

发表于 2009-11-4 01:10:02 | 显示全部楼层 IP:江苏扬州
谢谢各位的回答!
回复

使用道具 举报

发表于 2009-11-4 01:10:04 | 显示全部楼层 IP:江苏扬州
static继承下来的,从基类到派生类只保存一份数据,,是共享的,通常用来基类和派生类之间的联系
回复

使用道具 举报

发表于 2009-11-4 01:10:05 | 显示全部楼层 IP:江苏扬州
Ethip 在 2008-6-6 21:06 的发言:

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

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

staitc变量和方法为什么只能用类名来访问?虽然这种变量和方法是独立存在的,即没有和具体实例进行绑定,但也是允许通过实例名来访问的。
回复

使用道具 举报

发表于 2009-11-4 01:10:06 | 显示全部楼层 IP:江苏扬州
我发现个现象。在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)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 01:18 , Processed in 0.218904 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表