成员变量和成员属性:

静态成员函数和静态成员变量是不属于对象的,所以不占有空间,非静态成员是属于对象的,占有存储空间,空类大小1

#include "pch.h"
#include<iostream>
using namespace std; class Person {
static int age;
};
void test01() {
//一个类的大小是1,空类对象的大小为1,都有独一无二的地址,char维护这个地址
cout << "大小:" << sizeof(Person) << endl;
} int main() {
test01();
}

静态成员变量和静态成员函数是不属于对象的,非静态成员变量才属于对象上面

成员变量和成员属性是分开存储的

this指针:

this指针是隐含在对象成员函数内的一种指针,当一个对象被创建之后,他的每一个成员函数都含有一个系统自动生成的隐含之战this,用以保存这个对象的地址,也就是说虽然没有加上this指针,编译器在编译的时候也会默认加上的,void func(Person*this ){}
this指针永远指向当前本对象,this指针是一种隐含指针,它隐含于每个类的非静态成员函数中
指针永远指向当前对象
解决命名冲突

非静态成员函数才有this指针的,而静态成员函数是共享数据的,所以是没有指针的

#include "pch.h"
#include<iostream>
using namespace std;
#include <string>
//this指针指向被调用的成员函数所属的对象 class Person {
public:
void func() {
//this代表的被调用的对象,p1,p2
this->age = ;
this->name = "yun";
};
int age;
string name; Person plusage(Person &p) {//引用
this->age += p.age;//传进来的指针+传进来的age
return *this;//返回this本身,就是当前调用的对象
}
}; void test01() {
Person p1;
p1.func();//编译器会偷偷加入一个this的指针,Person *this
Person p2;
p2.func();
p2.plusage(p2).plusage(p2).plusage(p2);//注意,p2.plusage(p2)返回的是对象的本体,当前返回的对象,所以存在下一个方法,链式编程
cout << "name:" << p1.name << "age:" << p1.age << endl;
cout << "name:" << p2.name << "age:" << p2.age << endl;
}
int main() {
test01();
}

空指针:Person  p1=Null;

如果成员函数没有用到this的话,那么可以直接进行访问

如果成员函数有用到this,比如访问成员属性就要用到this,那么可以用if来进行判断是否是空指针(if  this==Null){return;}

#include  "pch.h"
#include<iostream>
using namespace std; //空指针访问成员函数
class Person {
public:
void show() {//下面没有用到this
cout << "show" << endl;
}
//this就是当前访问的指针
void shothis() {//Person *this,下面访问age的时候用到了this,this->age来访问的
if (this == NULL) {
return;//如果当前访问的指针为空的话就可以返回
}
cout << "age" << age << endl;//相当于这个age是this->age,>>Null->age
}
int age; }; void test01() {
Person *p1=NULL;//设置成空指针
p1->show();
} int main() {
test01(); }

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

  1. 无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two]

    无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two] extjs技术交流,欢迎加群(201926085) 不管是几级下拉列表的联动实现本质上都是根据某个下拉列表的变化,去动态加载其 ...

  2. Bootstrap入门(十二)组件6:导航标签页

    Bootstrap入门(十二)组件6:导航标签页   1.标签页 2.胶囊式标签页 3.垂直展示 4.两端对齐的标签页 5.禁用的链接 6.添加下拉菜单   先引入本地的CSS文件和JS文件(注:1. ...

  3. MyBatis基础入门《十二》删除数据 - @Param参数

    MyBatis基础入门<十二>删除数据 - @Param参数 描述: 删除数据,这里使用了@Param这个注解,其实在代码中,不使用这个注解也可以的.只是为了学习这个@Param注解,为此 ...

  4. SpringMVC.入门篇《二》form表单

    SpringMVC.入门篇<二>form表单 项目工程结构: 在<springmvc入门篇一.HelloWorld>基础上继续添加代码,新增:FormController.ja ...

  5. UWP入门(十二)--数据绑定用法

    原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...

  6. RabbitMQ入门教程(十二):消息确认Ack

    原文:RabbitMQ入门教程(十二):消息确认Ack 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csd ...

  7. Linux入门篇(二)——文件

    这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...

  8. JS基础入门篇(二十七)—BOM

    虽然上次写到js基础篇(二十四),这次直接写到(二十七).是为了提醒自己中间有几篇没写.特此说明一下啊. 1.window.open() 使用a标签呢,点击一下a标签页面才会跳转,有时候我们需要做的操 ...

  9. Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用

    该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...

随机推荐

  1. Centos7 启动指定docker容器报错

    今天做docker实验时,把docker镜像pull下后,启动报如下错误: 错误信息:WARNING: IPv4 forwarding is disabled. Networking will not ...

  2. Linux centos 推拉、共享、监控的设置的分享

    新建四台虚拟机 打开第一台连接shell更改主机名.网卡 backup 1.主机名网卡配置 [root@jytcentos7.6 ~]# hostnamectl set-hostname backup ...

  3. Spring Boot环境下出现No operations allowed after connection close错误

    一个基于springcloud的微服务项目,详细配置: SpringCloud + SpringMVC+SpringData JPA+ MySql+Postgresql 其中项目配置了多数据源,前期开 ...

  4. webpack4 学习 --- 处理静态资源

    webpack 是利用loader 来处理各种资源的,wepback的配置基本上就是为各种资源文件,指定不同类型的loader. 1,处理css 最基本的css 处理loader 是css-loade ...

  5. Xilinx FPGA 移位寄存器IP延时问题

    软件版本:Vivado2016.1 在使用移位寄存器IP时,对于不同延时拍数的使能延时可能会有问题. (1)32深度的可变长度移位寄存器,IP生成界面如下图所示. (2)128深度的可变长度移位寄存器 ...

  6. git学习02 - log查看&版本回退

    1.查看更新记录 git log /  git log --pretty=oneline D:\learn\git_test>git log commit a915e7b12076673d778 ...

  7. BZOJ2882工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  8. django csrftoken

    CSRF(跨站请求伪造) 背景知识:浏览器在发送请求的时候,会自动带上当前域名对应的cookie内容,发送给服务端,不管这个请求是来源A网站还是其它网站,只要请求的是A网站的链接,就会带上A网站的co ...

  9. 【tensorflow】学习笔记

    1.tensorflow中dynamic_rnn和rnn有什么区别?    在tensorflow中没有找到rnn这个方法难道是废弃掉了? rnn是静态图,比如有10个时间序列,那么它将全部展开,并且 ...

  10. prometheus 基于DNS的目标发现

    prometheus 基于DNS的目标发现 DNS服务发现依赖于查询A.AAAA或SRV DNS记录. 1.基于 SRV 记录发现 scrape_configs: - job_name: 'webap ...