类里面对象和指针的区别
关于指针和对象的区别困扰很多初学者,现在我就用一些直白的语言描述,来帮助大家越过这个坑,希望对大家有所帮助。
Student* s1;
s1 = new Student();
s1->set("111"); Student s2;
s2.set("222"); s1->print();
s2.print();
对于类student ,定义了一个对象 和一个指针。
类的指针:他是一个内存地址值,他指向内存中存放的类对象(包括一些成员变量所赋的值).
对象,他是利用类的构造函数在内存中分配一块内存(包括一些成员变量所赋的值).
在应用时:
1.引用成员: 对象用" . "操作符; 指针用" -> "操作符.
2.生命期: 若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内.而指针,则需利用delete 在相应的地方释放分配的内存块.
注意:用new ,一定要delete..
类的对象:用的是内存栈,是个局部的临时变量.
类的指针:用的是内存堆,是个永久变量,除非你释放它.
当类是有虚函数的基类,Func是它的一个虚函数,则调用Func时:
类的对象:调用的是它自己的Func;
类的指针:调用的是分配给它空间时那种类的Func;
对于一个类的对象和这个类的指针(用new运算符分配内存)在应用时有何区别
1.类和对象是两回事,对象是类的实例;
2.对象是在栈中分配的,使用new生成的对象是在堆中分配的;
3.要发挥虚函数的强大作用,必须使用指针来访问对象.
指针可以实现多态,直接用对象不行
执行定义对象,在栈空间
new处的在堆
注意名字的类型.
一个是Student
一个是Student*
Student是直接访问一个对象
Student*是间接访问一个对象,因为通过了一个指针作媒介.
类型决定了你能做什么.
其实作用基本一样 都是为了调用类的成员变量 和成员函数用的
当你希望明确使用这个类的时候,最好使用对象,如果你希望使用C++中的动态绑定,则最好使用指针或者引用
指针和引用用起来更灵活,容易实现多态等
类的指针:他是一个内存地址值,他指向内存中存放的类对象(包括一些成员变量所赋的值).
对象,他是利用类的构造函数在内存中分配一块内存(包括一些成员变量所赋的值).
在应用时:
1.引用成员: 对象用" . "操作符; 指针用" -> "操作符.
2.生命期: 若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内.而指针,则需利用delete 在相应的地方释放分配的内存块.
注意:用new 一定要delete..
当类是有虚函数的基类,f是它的一个虚函数,则调用f时:
类的对象:调用的是它自己的f;
类的指针:调用的是分配给它空间时那种类的f;
1.在类的声明尚未完成的情况下,可以声明指向该类的指针,但是不可声明该类的对象...
2.父类的指针可以指向子类的对象..
定义对象实例时,分配了内存。指针变量则未分配类对象所需内存
指针变量是间接访问,但可实现多态(通过父类指针可调用子类对象),并且没有调用构造函数。
直接声明可直接访问,但不能实现多态,声明即调用了构造函数(已分配了内存)。
至于那个效率高要看程序调用过程而定。
C++的精髓之一就是多态性,只有指针或者引用可以达到多态。对象不行
用指针:
第一实现多态。
第二,在函数调用,传指针参数。不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节。如果用对象,参数传递占用的资源就太大了
类里面对象和指针的区别相关推荐
- 【C++】38.类成员变量声明为 对象与指针的区别
在我们平时写代码或阅读代码时,经常会看到,某个类A中需要使用另一个类B的方法.那么下面会看到两种用法: 一种是直接定义一个B类对象. 一种是在类A中定义一个B类指针: 如: // 头文件 std::s ...
- C++ 类对象和 指针的区别
指针的情况 class Test{ public:int a;Test(){a = 1;} };int main() {Test* t1 = new Test();t1->a = 10;Test ...
- C++类对象和类指针的区别
好奇这个,所以参考了一些帖子,写下心得. 一篇转载率较高的帖子:C++ 类对象和 指针的区别 大佬都不贴结果....所以这里我给出代码和结果: #include<iostream> usi ...
- php中的类 对象的方法的区别,php中类和对象的区别是什么
php中类和对象的区别:类是对象的抽象,对象是类的具体实例:类是抽象的,不占用内存,而对象是具体的,占有内存空间.打个比方:类就是水果,对象就是苹果. 本教程操作环境:windows7系统.PHP7. ...
- 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...
- python3对象初始化_Python 面向对象概念 类和对象 对象初始化__init__ 绑定与非绑定...
面向对象 (Object Oriented Programming,简称OOP) 1.什么是面向对象:面向对象编程是一种思想,它指导程序员如何编写出更好的程序.它的核心是对象,此时程序员从操作者变成了 ...
- C++类的对象和类的指针的区别、指针和引用的区别
转自:https://blog.csdn.net/liulina603/article/details/47290963 #include <iostream> #include < ...
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- C++ 对象和实例的区别,以及用new和不用new创建类对象区别
起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题.当然这都是跟new的用法有关的.ne ...
最新文章
- formdata 嵌套_角度7 FormData+文件+嵌套对象
- P1005 采药(Tyvj)
- oracle编写备份数据库代码,oracle_oracle数据库创建备份与恢复脚本整理,1:创建用户 复制代码 代码如 - phpStudy...
- Linux用ICMP协议实现简单Ping网络监测功能
- 机器人总动员中的小草_机器人总动员读后感
- 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
- java Set无序集合 HashSet 的对象元素唯一性
- [机器学习-坑] error: Microsoft Visual C++ 14.0 is required
- IronRuby 发布第一个版本
- python21天打卡Day10-string和bytes互转
- python库怎么绘画_python中的turtle库(图形绘画库)
- markdown编辑器------------编辑方法
- 几个小图像处理工具网址
- php文本框如何设置高度,更改文本框高度?
- 射频识别技术IC卡——通讯协议概述
- python非技术面试题宝典
- 如何设置ul中li的行距
- 高斯计校准与计量的区别
- 用HTML+CSS做一个漂亮简单的个人网页~个人相册介绍个人主页模板(6个页面) ~学生HTML个人网页作业作品~
- 关于onMeasure(转载)
热门文章
- 如何利用微博热门话题进行引流?
- html5添加新标签,HTML5新添加的标签及用
- 90条你不知道的冷门知识(知道5条以上的是神仙级)
- JWT详解和使用(jjwt)
- python中commands模块
- 路由追踪命令:tracert、pathping 值得收藏
- 2020年互联网大厂中秋礼盒PK!
- Opencv4测试报错00007FFB3253A9C0 (ntdll.dll)处引发的异常
- java计算日历天数的方法,Java计算一年中的天数,或两个日期之间的天数
- Flask 安装第三方库 ImportError: No module named flask 导包失败,Python3重新安装Flask模块