您的位置:首页 > 编程语言 > C语言/C++

C++经典问题解析之二

2017-12-07 11:37 211 查看

隐藏的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++语言 linux