C++静态成员和非静态成员的区别
1.数据成员可以分静态变量、非静态变量两种.
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.静态成员在每个类中只有一个拷贝,是解决同一个类的不同对象之间数据和函数共享问题的。
非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..
一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数..
2.
静态成员函数可以直接引用该类的静态数据成员和静态成员函数,但不能直接引用非静态数据成员和非静态成员函数,否则编译报错。如果要引用,必须通过参数传递的方式得到对象名,然后再通过对象名引用
class A
{public:static void f(A a);private:int x;
};
void A::f(A a)
{cout<<x<<endl;//对x的引用是错误的cout<<a.x<<endl;//正确的
}
例2:
#include<iostream>
using namespace std;class Myclass
{private:int m; // 非静态数据成员static int n; // 静态数据成员public:Myclass(); // 构造函数static int getn(Myclass a); // 静态成员函数
};Myclass::Myclass()
{m = 10;
}int Myclass::getn(Myclass a)
{cout << a.m << endl; // 通过类间接使用 非静态数据成员return n; // 直接使用 静态数据成员
}int Myclass::n = 100; // 静态数据成员初始化void main()
{Myclass app1;cout << app1.getn(app1) << endl; // 利用对象引用静态函数成员cout << Myclass::getn(app1) << endl; // 利用类名引用静态函数成员
}
那么可以得出结论,静态成员和非静态成员区别如下:
1.访问方式不一样.静态成员(通过类名.静态成员名访问).非静态成员(通过对象名.非静态成员名访问)
2.静态成员属于类.该类的所有对象共同拥有这一个成员.
非静态成员属于对象,每个对象都有一份.静态成员不论有类有多少个对象.只在内存中分配一块空间.
C++静态成员和非静态成员的区别相关推荐
- C++静态成员和非静态成员的区别 及修饰
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态 ...
- 静态成员与非静态成员的区别
一.静态成员的特点: (1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化; (2)static数据成员只能在类的外部进行初始化(特 ...
- 静态成员和非静态成员的区别
1.数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...
- java学习总结(16.06.07)类的静态成员和非静态成员
java里,类的成员可分为静态成员和非静态成员(实例成员),静态成员和非静态成员,从定义上来说就是有没有static修饰符修饰的区别.有static修饰的成员就是静态成员.如 public stati ...
- java静态成员和非静态成员的区别
static(静态)关键字 static关键字: 用于修饰成员(成员变量和成员函数) 被修饰后的成员具备以下特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类 ...
- 静态成员和非静态成员的区别是什么?
一.名称上的区别: 成员变量也叫实例变量:静态变量也叫类变量. 二.内存存储的区别: 成员变量存储到堆内存的对象中,静态变量存储到方法区的静态区中. 三.生命周期不同: 1)成员变量随着对象的出现而出 ...
- static的应用以及静态与非静态的区别
先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别. package com.liaojianya.chapter5; ...
- 静态成员变量和静态成员函数(static)
数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...
- C# 静态和非静态的区别
静态标记 – static //静态方法 public static void Max(){ } //非静态方法 public void Max(){ }//静态类 public static cla ...
最新文章
- 年化收益14%的投资机会,出手吗?
- STM32-USART接收程序
- Python collection模块
- 如何实现ABB机器人与老式焊机的连接控制
- 160. 相交链表 golang
- java终结者,动态语言是否会成为JAVA的终结者?
- 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇
- QScrollArea 详解
- linux fcntl注销信号,linux下fcntl的使用(转载)
- 【编辑器】VSCode的Web前端(html,css,JavaScript)开发环境打造
- Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;
- Elasticsearch 系列4 --- Windows10安装Kibana
- Angr安装与使用之使用篇(六)
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
- 程序员的思维修炼:开发认知潜能的九堂课
- 三星android mac地址修改,三星手机如何改mac地址啊
- Unmapped Spring configuration files found. Please configure Spring facet or use ‘Create Default Con
- 必应每日一图php,轻量必应每日一图HTML源码
- 人生在世,最大的笑话莫过于自作多情...
- 芯片之家精选文章合集 (二):收藏起来慢慢看
热门文章
- Bone-Age-Detection-From-X-Ray
- 【设计灵感】产品设计中的灵感来源于日常生活
- 计算机类课程嵌入式系统的特点及其应用,嵌入式系统的准确定义、特点及其重要性...
- android 动画制作小软件GifMaker
- 出现这个错误的解决方法No enclosing instance of type 类名 is accessible. Must qualify the allocation with
- 技术领导力: 深度访谈《深入分布式缓存》
- 浅谈Google SEO入行
- 克隆远程仓库#180804
- 改善脑力的70条方法[翻译] 1
- Springboot使用Mapstruct拷贝对象,集成swagger2