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? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...
随机推荐
- asp.net core 与EFcore 入门
什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...
- shell编程, 100文钱买100只鸡, 简单实现
今天碰到一个有趣的问题: 群友用shell写的一个: #!/bin/bash # 百元买百鸡,每种鸡至少买一只 all= # 公鸡每只多少元 read -p '公鸡多少文一只: ' gongji # ...
- 算法38---292. Nim游戏
1.题目: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...
- keepalived + nginx 实现高可用
原理 nginx 可以实现负载均衡,但 nginx 自身存在单点故障的问题,这时候最先想到的就是 keepalived,可以解决单点故障的问题 由于没有使用 lvs,所以这里 nginx 之间不存在负 ...
- shell 特殊字符
shell 基础 # 当做注释的比较多 : 命令分隔符,在同一行上写两个或两个以上的命令 :: 是case 代码块的结束符 . 点作为文件名的一部分 隐藏文件 目录名 点是正则表达式中的匹配字符 '' ...
- 洛谷 P1220 关路灯 (贪心+区间dp)
这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...
- UVA Foreign Exchange
Foreign Exchange Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Your non ...
- 采药 水题 dp 01背包问题 luogu1048
最基本的01背包,不需要太多解释,刚学dp的同学可以参见dd大牛的背包九讲,直接度娘“背包九讲”即可搜到 #include <cstdio> #include <cstring> ...
- POJ——T1860 Currency Exchange
http://poj.org/problem?id=1860 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 29874 ...
- Qt资料大全
简述 发福利了.发福利了.发福利了,重要的事情说三遍... 为了方便更多Qter了解.学习Qt,现将相关资源进行整理,主要内容包括:Qt官网.编码风格.GitHub & Third-Party ...