静态成员变量:可以共享数据,类内声明,类外初始化(实现)

// 静态成员变量.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream>
using namespace std; class Person {
public:
static int age;//加上static就是静态成员变量,会共享数据
//静态成员变量也是有权限 private:
static int other;//私有权限
}; //类外是可以实现静态成员变量,包括public,private,但是类内只能访问public的,private是不能访问的
int Person::age = ;//初始化,类外初始化实现
int Person::other = ;//这个也是可以访问到里面的私有权限的,在类外面就可以访问到这私有权限
void test01() {
//第一种方式:通过对象来访问属性
Person p1;
p1.age = ;
Person p2;
p2.age = ;
//下面是根据那个对象来访问这个属性,不同对象
cout << "p1 age:" << p1.age << endl;//结果4
cout << "p2 age:" << p2.age << endl;//结果4
//共享数据 //第二种方式
//通过类名来访问数据

cout << "类名访问数据" << Person::age << endl;//这个不会调用构造函数,所以不建议在类内的默认构造函数里面进行初始化数据
//cout << "访问私有权限" << Person::other << endl;//这个是不可以访问到私有权限的,类里面
} int main() { test01();
}

可以看到p2,p1指向的age的结果是相同的,因为第二次通过p2来访问属性的时候,这个name值已经共享了,所以两者是相同的,所有对象共享数据

总结:类内声明,类外实现(注意是类外),共享数据,分权限,public是可以访问的,private是不可以访问的,访问可以通过类来访问,Person::name,也可以通过对象来访问,p1.name,如果是通过类(Person::name)来进行访问的话,那么是不会调用默认构造函数的,如果是对象进行访问的话,那么会调用默认构造(有参和无参).

静态成员函数:

#include "pch.h"
#include <iostream>
using namespace std; //静态成员方法 //变量,声明,实现
class Person {
public: static int age;
int num;
//静态成员函数
//1.静态成员函数无法访问普通的成员变量,但是可以访问静态的成员变量
//普通成员函数都可以访问
//静态成员函数也有权限的区分\
//可以通过对象来访问也可以通过类名来访问
static void func() {
//静态成员函数,可以访问静态成员变量,但是不可以访问普通成员变量
age = ;//静态成员变量是可以访问的
//num = 3;//不可以访问普通成员变量,num
}
}; int Person::age = ;//静态成员数据在外部定义
//int Person::num = 4; void tets01() {
Person p1;
p1.func();//调用func可以初始化静态成员变量
p1.num = ;
cout << "age:" << p1.age << "num:" << p1.num << endl;
} int main() {
tets01();
}

总结:

静态成员函数无法访问普通的成员变量,但是可以访问静态的成员变量
静态成员函数也有权限的区分,public是可以访问的,但是private是不可以访问的,外部
可以通过对象来访问也可以通过类名来访问

C++入门篇十的更多相关文章

  1. 1.入门篇十分钟了解Spring Cloud

    文章目录 Spring Cloud入门系列汇总 为什么需要学习Spring Cloud 什么是Spring Cloud 设计目标与优缺点 设计目标 优缺点 Spring Cloud发展前景 整体架构 ...

  2. C++入门篇十二

    成员变量和成员属性: 静态成员函数和静态成员变量是不属于对象的,所以不占有空间,非静态成员是属于对象的,占有存储空间,空类大小1 #include "pch.h" #include ...

  3. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  4. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  5. JS基础入门篇(三十五)—面向对象(二)

    如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)

  6. [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动实现自动化测试入门基础应用

    一.什么是DDT数据驱动框架 ​ 全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动.ddt使用简介: 1.测试数据为多个字典的list类型 2. ...

  7. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  8. Unity3D大风暴之入门篇(海量教学视频版)

    智画互动开发团队 编   ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...

  9. PC游戏编程(入门篇)(前言写的很不错)

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

随机推荐

  1. laravel 开启定时任务需要操作

    1.在xshell 中 crontab -e //编辑任务crontab -l //查看执行中的任务列表 2.在打开的任务中: /home/wwwroot/default 换为自己项目的根路径 vag ...

  2. Python进阶8---面向对象基础1

    面向对象 语言的分类 Python的类 定义 class ClassName: pass class MyCalss: """A example class"& ...

  3. Mac打开Terminal报错-bash : : command not found

    问题描述: Mac系统在打开Terminal的时候,报错-bash : : command not found. 问题分析: 报错并不影响Terminal的使用,于是忽略不计.但是在修改.bash_p ...

  4. JDK源代码学习-基础类

    一.概述 1.Java,是一套语言规范,例如规定了变量如何定义.控制语句如何写等,提供基本的语法规范.JDK是java自带的一套调用组件,是对基本java语法规范的进一步封装,jdk中都是使用java ...

  5. 关于【jq插件开发】

    很详细,原文链接:https://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html#commentform和https://www.cnblogs ...

  6. 第二篇--上传git 代码

    准备工作: 首先,注册一个GitHub账号. 接着,新建一个仓库. 最后,下载Git 上传代码步骤: 第一步,新建一个本地文件夹作为本地仓库,进入该文件夹. 右击选择Git Bash Here ,输入 ...

  7. linux服务器显卡崩了怎么处理

    在登录界面出现分辨率特别大,整个图形界面特别大,并且怎么也登录不上去的情况时 对于这种情况,一般就是显卡驱动崩了的原因,所以我们可以首先检查显卡驱动是否有问题 nvidia -smi 如果出现说驱动链 ...

  8. linux device drivers ch03

    ch03.字符设备驱动程序 编写驱动程序的第一步就是定义驱动程序为用户程序提供的能力(机制).接下来以scull(“Simple Character Utility for Loading Local ...

  9. 升级AndroidStudio3.4问题汇总

    1.Could not get unknown property 'bootClasspath' for object of type org.gradle.api.tasks.compile.Com ...

  10. Springboot-async(异步)初识

    通过@Async注解实现一个简单的异步任务处理 首先,假设一个全自动化的工厂车间每天需要开启四台互不影响的机器开关来完成生产量,于是车间主任A委派“同步甲”和“异步乙”轮 流完成每天打开机器开关的任务 ...