`
jgsj
  • 浏览: 964694 次
文章分类
社区版块
存档分类
最新评论

关于static的相关讨论:

 
阅读更多
关于static的相关讨论:
1)类中的静态成员变量;
类中的静态成员变量不属于某个对象所有,而是同一个类的不同对象共有的。他只占一个内存空间(而不是为每个对象都保留一个内存空间)。每一个对象都可以引用这个变量,而且他对每一个成员都是一样的。如果改变他的值,则对象中这个值都变了。
如果声明了一个类,如果没有对他定义对象,则类的一般数据成员不占内存空间,只有定义了对象才占内存空间。但静态成员变量不属于某个对象,在为对象分配内存空间时不包括静态成员所占的内存空间。他是在所有类对象中单独开辟的,即使不定义类对象,这个成员也占内存空间。可以被引用。
静态成员可以初始化,但只能在类体外进行。他可以通过对象名引用也可以通过类名引用。
观察程序:
1)
#include<iostream>
using namespace std;
class stu
{
static int a;
int b;
public:
stu();
如果改成:stu::stu()
{
stu::stu()
{
a=1;
b=2;
}
void stu::print()
b=2;
}
int stu::a=1;
就不会出错。
void print();

};

{
cout<<a<<""<<b<<endl;
}
int main()
{
stu aa;
aa.print();
return 0;
}
此程序在编译时没有发现什么错误,但在连接时出现了两个错误。
wjh.obj : error LNK2001: unresolved external symbol "private: static intstu::a" (?a@stu@@0HA)
Debug/wjh.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
但把关键字static去掉就不出现问题了。
2)
#include<iostream>
using namespace std;
class stu
{
public:
void print();
};
void stu::print()
{
static int b=1;
cout<<""<<b++<<endl;
}
int main()
{
stu aa[5];
int i;
for(i=0;i<5;i++)
aa[i].print();
getchar();
return 0;
}
输出结果:
1
2
3
4
5
这说明了成员函数中的静态成员变量也是作用于所有的类对象的。
3)
#include<iostream>
using namespace std;
class stu
{ int a,b;
public:
void print();
};
void stu::print()
{
static int b=1;
cout<<""<<b++<<endl;
}
int main()

如果把aa改为aa[5],则输出40
{

stu aa;
cout<<sizeof(aa)<<endl;
getchar();
return 0;
}
结果输出:8
把pint函数删除,输出的结果依然为8
这是否说明了类中的函数体不占用内存,但为什么不占用内存?
Static 变量实际上可以看作是一个全局变量,只是他有自己 的作用范围。在一个函数中定义,他只作用于定义的一类函数中,不经特别申请不能被别的函数调用。在调用函数时不为这函数中的静态成员分配地址,因为他的地址是在编译时已经分配。Static变量实现了数据在一类函数中的共享。
在类中,成员函数不占用内存。经过测试,一个类所占用的内存只与他所定义的变量个数和种类有关。关于类的赋值问题还须待进一步讨论。
#include<iostream>
using namespace std;
class stu
{
int a;
public:
static void display();
};
void stu::display()
{
cin>>a;
cout<<""<<a<<endl;
}
int main()
{
stu aa;
aa.display();
getchar();
return 0;
}
调试结果:
C:/Program Files/Microsoft Visual Studio/MyProjects/wjh1/wjh1.cpp(11) : error C2597: illegal reference to data member 'stu::a' in a static member function
C:/Program Files/Microsoft Visual Studio/MyProjects/wjh1/wjh1.cpp(12) : error C2597: illegal reference to data member 'stu::a' in a static member function
书本上有这么一句话:当调用一个成员函数时系统会把该对象的其始地址赋给成员函数this指针。而静态成员函数不属于某个对象,他与任何对象都无关,因此静态成员函数不能进行默认访问(即引用数据成员时不指定对象名)。静态成员函数可以直接引用本类中的静态成员变量,因为静态成员同样属于类的,可以直接引用。

下面有关静态成员函数的讨论:

把a定义成为static变量,调试通过,但连接出错:wjh1.obj : error LNK2001: unresolved external symbol "private: static intstu::a" (?a@stu@@0HA)
Debug/wjh1.exe : fatal error LNK1120: 1 unresolved externals
为什么调用本类中的静态成员会出错?
把a变成共有的静态成员变量,还是 有错误:wjh1.obj : error LNK2001: unresolved external symbol "public: static intstu::a" (?a@stu@@2HA)
Debug/wjh1.exe : fatal error LNK1120: 1 unresolved externals
代码1:

分享到:
评论

相关推荐

    sig-storage-local-static-provisioner:本地卷的静态供应商

    社区、讨论、贡献和支持行为守则 概述 本地持久卷允许用户通过标准的 PVC 接口以简单便携的方式访问本地存储。 PV 包含系统用于将 pod 调度到正确节点的节点亲缘关系信息。 此处提供了一个外部静态供应器,以帮助...

    dynamic_cast,static_cast 和 reinterpret_cast

    讨论 dynamic_cast,static_cast&lt;&gt; 和 reinterpret_cast&lt;&gt; and Runtime Type Information

    Java static关键字解析

    Java static关键字解析静态内部类(默认指外部类的内部类)静态方法静态变量静态语句块 范围:只围绕外部类进行讨论,例如内部类的内部类这种多层套娃式的暂不进行讨论 jdk版本: jdk8 静态内部类(默认指外部类的...

    static-site-boilerplate:建立现代静态网站的更好工作流程

    在讨论 :unicorn_face: 主页: : 文档: : 安装 git clone https://github.com/ericalli/static-site-boilerplate cd static-site-boilerplate rm -rf .git && git init 产品特点 现代技术:完全支持HTML5,...

    深入理解PHP中的static和yield关键字

    本文主要给大家介绍了关于PHP中static和yield关键字的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 先来说说 static 关键字。本篇只讲静态方法的使用与后期绑定的知识点。 static ...

    VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:

    本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理; 2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制; 3. 熟悉OOP理论和技术; ...

    primavera:视觉实验

    静态站点样板 在讨论 :unicorn: 主页: : 文档: : 安装git clone https://github.com/ericalli/static-site-boilerplate cd static-site-boilerplaterm -rf .git && git init特征现代技术:完全支持HTML5,...

    使用CSS的position属性控制页面布局的入门教程

    position: absoluteposition: relativeposition: fixedposition: staticposition: inherit本文主要详细讨论 position 属性的前三个值,首先大概讲解下后两个值: static static 为 position 属性的默认值,static ...

    PHP5 关于面向对象的详细分析和讨论

    里面涵盖了PHP面向对像的所有的内容的详细讨论,让你对面向对象的概念有更深刻的理解.对于某些关键字的使用做了详细的分析其使用方式和注意的事项,如static , private ,public ,protected,final...等 等

    构建现代静态网站的更好工作流程。-Node.js开发

    静态站点样板主页:http://staticsiteboilerplate.com/文档:https://docs.staticsiteboilerplate.com/安装git clone https://github.com/ericalli/stati静态站点样板在Product Hunt上进行讨论:unicorn:主页: ...

    littleluck-master.zip

    欢迎加群讨论:148079860 运行依赖 JDK 7+ for littleluck NinePatch for littleluck 快速入门 下载littluck,并添加到你的项目中 Startup.java public class Startup { public static void main(String[] args)...

    pith:Pith讨论项目的客户端和服务器

    这些是: static :服务于React客户端app :React客户端使用的socketio接口。 worker :一个工作脚本,使用执行各种长期任务,例如完成讨论时将其存档。 redis :一个Redis数据库,由任务队列(

    swagger-dubbo:Dubbo的Swagger服务文档

    随着dubbo的蓬勃发展,个人对这个项目又没有一点新的期待和想法(功能和架构上),目前开通了群聊频道,欢迎加入讨论: swagger-dubbo起一个解析Swagger和收集文档的作用 dubbo-swagger-doc是一个web应用,从注册...

    spas:使用PostgREST等的单页应用程序服务器

    温泉spas是位于SPA(单页应用程序)和PostgreSQL数据库之间... # also provided by Heroku$ export PORT=4000$ cd /path/to/static/files && spas...有关使用spa的Elm应用程序,请参见 。背景邮寄讨论: : elm-discuss/

    C#如何使用WinApi.doc

    使用C#调用windows API入门...我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法。 2.将 DllImport 属性附加到该方法。DllImport 属性允许您指定包含该方法的 DLL 的名称。

    Spring Boot: Bean definition overriding

    在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...

    switch 语句switch 语句

    它也适用于 enumerated types (枚举类型)(在 Enum Types 中讨论),String 类以及一些包装某些原始类型的特殊类:Character,Byte,Short 和 Integer(在 Numbers and Strings 中讨论)。 以下代码示例 SwitchDemo ...

    在一小时内学会 C#(txt版本)

    接下来关于 C# 的讨论主题: ? 编程结构 ? 命名空间 ? 数据类型 ? 变量 ? 运算符与表达式 ? 枚举 ? 语句 ? 类与结构 ? 修饰符 ? 属性 ? 接口 ? 函数参数 ? 数组 ? 索引器 ? 装箱与拆箱 ? 委托 ? 继承与多态 以下...

    spring-learning:我的学习Spring和Spring Boot的笔记

    此存储库包含有关对Spring Framework(v5.2.x)和Spring Boot(v2.4.x)的源代码进行分析的学习笔记。 我试图使这些注释尽可能地易于理解,因此,我主要将这些注释组织成图表,并结合一些微小的代码片段,以使说明...

    通用数据库访问类sql server 版本常用方法封装

    /*============================================================================== ... * 学习和讨论有关asp.net mvc ,Ajax ,jquery ,,html/css,xml ,sqlserver ,wpf,IIS相关技术的交流和学习。

Global site tag (gtag.js) - Google Analytics