【C++深度剖析教程2】C++经典问题解析之二 this指针与成员函数
隐藏的this指针,所有对象共享类的成员函数
写一篇博客花费时间虽然长,但是却让你对内容的记忆尤为深刻,尤其是你对它的态度。记录菜鸟的成长日记,也希望同为菜鸟的你们与我一起共同进步!!现在分享的是C++的学习笔记,后面会同时分享数据结构学习笔记,以及我目前手中项目的制作流程!!忘记说了,目前手中正在做的是 基于Imx6的一个linux操作系统的移植,主要做驱动的移植与系统的移植,后期可能会移植QT,这些我都希望记录在我的博客中,相信几年后,我也有可能会成为了博客专家了呢?哈哈哈!!!
好,今天的主题依然接着上一篇博客的线路,来探讨一下目前我所学到的C++中的一些经典问题的 探讨!
1.成员函数和成员变量都是隶属于具体的对象么?
从面相对象的角度
- 对象由属性(成员变量)和方法(成员函数)构成
从程序运行角度
- 对象由数据和函数构成
*数据可以位于栈,堆和全局数据区
*函数只能位于代码段
直接上代码吧,文字的描述总是很枯燥!!!
#include <stdio.h>class Test
{int mi;
public:int mj;Test(int i);Test(const Test& t);int getMi();void print();
};Test::Test(int i)
{mi = i;
}Test::Test(const Test& t)
{mi = t.mi; //mi 为private 类型,为何可以调用?
}int Test::getMi()
{return mi;
}void Test::print()
{printf("this = %p\n", this);
}int main()
{Test t1(1);Test t2(2);Test t3(3);printf("t1.getMi() = %d\n", t1.getMi());printf("&t1 = %p\n", &t1);t1.print();printf("t2.getMi() = %d\n", t2.getMi());printf("&t2 = %p\n", &t2);t2.print();printf("t3.getMi() = %d\n", t3.getMi());printf("&t3 = %p\n", &t3);t3.print();return 0;
}
先运行一下,我还是将它放到linux中运行,输出结果为:
t1.getMi() = 1
&t1 = 0xbfcc3d68
this = 0xbfcc3d68
t2.getMi() = 2
&t2 = 0xbfcc3d60
this = 0xbfcc3d60
t3.getMi() = 3
&t3 = 0xbfcc3d58
this = 0xbfcc3d58
以上输出可以看出每一个对象以及this所指的地址都是一样的,这说明了一些问题:
可以得出一下四条结论:
-每一个对象拥有自己独立的属性(成员变量)(学了虚拟内存部分不之后,这些概念变的很清晰)
-所有的对象共享类的方法(成员函数)
-方法能够直接访问对象的属性
-方法中的隐藏参数 this 指针用于指代当前对象
程序中的问题mi = t.mi; //mi 为private 类型,为何可以调用?
,因为拷贝构造函数Test::Test(const Test& t)
本身也属于一种成员函数,能够直接访问对象的属性。
【C++深度剖析教程2】C++经典问题解析之二 this指针与成员函数相关推荐
- 【C++深度剖析教程14】经典问题解析三之关于赋值的疑问
今天我们来总结一下,之前所学C++中所遇到的一些经典的问题. 第一个疑问是: -什么时候需要重载赋值操作符 -编译器是否提供默认的赋值操作? 解答: *编译器为每个类默认重载了赋值操作符 *默认的赋值 ...
- 【C++深度剖析教程15】经典问题解析之关于string的疑问
今天来看一下在面试笔试中经常会出错的地方. 我们先来看一个代码: #include <iostream> #include <string>using namespace st ...
- 【C++深度剖析教程39】实现C++数组类模板
上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数 实现C++数组类模板 1.模板中的数值型参数 模板参数可以是数值型参数.也就 ...
- 【C++深度剖析教程7】C++之类中的函数重载
函数重载的回顾(接上一篇文章): 函数重载的本质为相互独立的不同的函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的成员 ...
- 【C++深度剖析教程1】C++中的经典问题解析-c++中的对象的构造顺序与析构顺序
c++中的对象的构造顺序与析构顺序 问题一 当程序中存在多个对象时,如何确定这些对象的析构顺序? 一.单个函数创建时构造函数的调用顺序 1.调用父类的构造过程 2.调用成员变量的构造函数(调用顺序与声 ...
- 【C++深度剖析教程38】类模板深度剖析
加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 1.多参数类模板 类模板可以定义任意多个不同的类型参数 类模板可以被特化: 指定类模板的特定实现 部分类型参数必须 ...
- 【C++深度剖析教程25】继承中的构造与析构
今天来学习C++中继承的构造与析构,有兴趣一起学习的加qq:1126137994 1.问题 如何初始化父类成员?父类构造函数与子类构造函数有什么关系? 子类对象是如何构造的? 子类中可以定义构造函数 ...
- 【C++深度剖析教程9】初探C++标准库
在这之前,我写的C++程序不能叫做标准的C++程序,因为里面写的大多数还带有C语言的影子.今天我们来学习C++标准库. 首先看一下例子:操作符<<的原生意义是按位左移.那么我们重载这个操作 ...
- 【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值
上一篇文章学习了数值型模板技术,并利用相关技术,实现了C++的数组类模板.点击文章查看上一篇文章:点击链接查看 本篇文章,继续利用模板技术来解决一个问题. 如果想求1+2+3+-+N的结果,有很多种方 ...
最新文章
- 用php生成html文件,怎样用PHP生成html文件
- Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构
- t test formula
- oracle := 和=,oracle a:=100 和 b=:c 区别
- 可穿戴在线展持续升温:聚焦产业热点 畅谈核心技术发展
- 小程序 php转excel,做微信小程序上传数据 数据格式?-微信 上传数据 生成excle
- Web前端—— JQuery迷你版实现以及使用
- 内存泄漏的原因及解决办法_内存泄漏的场景和解决办法
- deepin linux 命令行_5 个面向新手的 Linux 发行版
- [技术博客]使用wx.downloadfile将图片下载到本地临时存储
- 如何看懂常用原理图符号、如何阅读原理图
- codeforces 1436E Complicated Computations
- 1031 Hello World for U
- 刘彬20000词汇10
- Codeforces #467 (Div. 2) B. Vile Grasshoppers 蚂蚱的题目
- 关于导出文件中文名乱码问题,response.setHeader(),postman测试有误,直接用浏览器测试
- 中国计算机学会推荐国际期刊和会议2011
- proteus——555 PWM 发生器
- 视图的定义,修改,删除,更新,以及定义视图的好处。
- c++ 转bcd码_BCD码、十六进制与十进制互转