C++语言笔记系列之十——静态成员
1.静态成员
(1)由keywordstatic修饰
静态变量定义语句在编译阶段就运行,运行过程中不再运行。
(2)分类:静态数据成员、静态成员函数。
(3)静态成员时类的全部对象共享的成员,而不是某一个对象的成员。
2.静态成员的使用
(1)在定义说明前加上statickeyword。比如:
static int x;
(2)静态数据成员必须进行初始化,而且初始化必须在类外完毕。
(3)静态数据成员的初始化
数据类型 类名::静态数据成员名 = 值。//注意这里没有static出现
(4)绝对不能使用对象名来使用静态数据成员,再次强调静态数据成员是属于整个类公有,而非某一个对象。
对象名.静态成员名 //错误
(5)正确的使用方式
类名::静态数据成员
(6)假设静态数据成员的訪问权限同意,才干够在类外訪问。
3.静态数据成员举例
#include <iostream.h>
class Tc
{
int i;
static int k;
public:
Tc()
{
i = 0;
i ++;
k ++;
}
void display()
{
cout<<"i = "<<i<<", k = "<<k<<endl;
}
};
int Tc::k = 0;
int main()
{
Tc A, B;
A.display();
B.display();
}
输出结果:
i = 1, k = 2
i = 1, k = 2
若改为:
Tc::Tc()
{
i = 0;
i ++;
Tc::k++;//这个地方的Tc::能够省略
}
4.类的静态成员函数
(1)类的静态成员函数属于类而不是属于对象。
(2)类的静态成员函数视线中不可直接使用非静态成员,可是能够直接使用静态成员。
(3)若在静态成员函数中引用非静态成员,必须加对象名(静态成员函数接收參数然后通过參数来调用)。
5.补充
Test t1(t2); //调用拷贝构造函数
Test t1(5); //调用构造函数
6.找出下面代码片段中的错误并分析原因。
class myclass
{
public:
static void fun();
private:
static int global;
};
void myclass::fun()
{
global = 100;
}
分析:错误出在将类的静态成员放在函数中初始化,正确的初始化方法是放在类外且在函数外完毕。
class myclass
{
public:
static void fun(myclass my);
private:
int global;
};
void myclass::fun()
{
cout<<global;
}
分析:错误出在两个地方,第一个地方,函数的定义和使用上出现了參数上的不一致;第二个地方类的静态成员函数能够引用静态数据成员,但对于非静态数据成员的引用必须通过对象来完毕。
补充:
(1)全局变量中不出现static修饰,static要么出如今类内要么出如今函数内。
(2)引用对象时。类的对象必须先完毕初始化。
C++语言笔记系列之十——静态成员的更多相关文章
- C++语言笔记系列之十二——C++的继承
C++的继承 1.继承方式 public(公有继承) 派生类中的成员能够訪问基类的public成员和protected成员,但不能訪问基类的private成员. 派生类的对象仅仅能訪问基类的publi ...
- C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
1.赋值兼容规则 (1)派生类对象能够给基类对象赋值,这样的情况下派生类对象将从基类继承的成员的值赋值给一个基类对象:可是不同意将一个基类的对象赋值给一个派生类. (2)能够将派生类对象的地址赋给基类 ...
- C++语言笔记系列之十八——虚函数(1)
1.C++中的多态 (1)多态性:同一个函数的调用能够进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接.即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态 ...
- C++语言笔记系列之二十——模版
1.随意输入两个数x和y,输出最大值max. int max(int x, int y) {return x>y? x:y;} 2.函数模版 (1)用一种或者多种通用类型去表示函数--函数模版. ...
- C++语言笔记系列之十三——派生类构造函数的调用
1.派生类构造函数的调用 (1)一个基类的全部数据成员均被派生类继承.创建一个派生类对象时.系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类 ...
- C语言学习系列笔记
1.小甲鱼 C语言教程系列
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Dynamic CRM 2015学习笔记 系列汇总
这里列出所有 Dynamic CRM 2015学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址:Dynamic CRM 2015学习笔记 系列汇总 一 ...
- Hadoop学习笔记系列文章导航
一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...
随机推荐
- 路飞学城Python-Day9(practise)
def save(): with open('practise_4', 'w+', encoding='utf-8') as f: for i in user_list: info = str(i) ...
- 对同层数据进行处理,做成树状图形式的数据结构,并符合elementui中的tree结构
//通过子级的pid找到父级对应的id,制作树状图 var data = [ { id: 1, name: "办公管理", pid: 0 }, { id: 2, name: &qu ...
- input标签type为number时,输入小数,在Firefox浏览器上输入框标红的问题
问题一:firefox 下 默认情况 <input type="number"> 只允许输入整数,输入小数时会报错,输入框被标红 这时候可以添加参数 step=&q ...
- es-for-Laravel: Composer 包安装, Laravel 最简单的方式操作 Elasticsearch
composer 安装:composer require ethansmart/es-for-laravel github 地址:https://github.com/roancsu/es-for-l ...
- HDU——T 2444 The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Memory Limi ...
- 优秀Swift开源项目推荐
工具类 SwiftyJSON:GitHub上最为开发者认可的JSON解析类 Safe.ijaimi:源码漏洞分析检测工具,一键完成 Dollar.swift:Swift版Lo-Dash(或unders ...
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
二分.情况讨论 因为数组有序,所以能够考虑用二分.通过二分剔除掉肯定不是第k位数的区间.如果数组A和B当前处理的下标各自是mid1和mid2.则 1.假设A[mid1]<B[mid2], ①.若 ...
- linux程序设计——个人总结
linux程序设计--个人总结 到今天为止,<linux程序设计>学习基本完毕了.从五月下旬開始接触linux,学习安装Ubuntu14.04,六月份開始学习<linux程序设计&g ...
- codeforces #313(div 2)
B. Gerald is into Art time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- MySQ学习笔记之十 NULL值处理
这是MySQL一大特殊之处. 概念上.NULL意味着"没有值"或"未知值",且它被看作有点与众不同的值. 为了測试NULL.你不能使用算术比較运算符比如=.&l ...