首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

11.9 C++对象指针

C++指向对象指针 C++建立对象时,编译系统会为每一个对象分配一定存储空间,让存放其成员。对象空间的起始地址就是对象指针,可以定义一个指针变量,用来存放对象指针。...定义指向类对象指针变量的一般形式为  类名 * 对象指针名; 可以通过对象指针访问对象对象的成员 C++指向对象成员的指针 在C++中,对象是有地址的,存放对象初始地址的指针变量就是指向对象指针变量...,对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。...1、指向对象数据成员的指针  定义指向对象数据成员的指针变量的方法和定义指向普通变量的指针变量方法相同。...数据的指针变量 定义指向对象数据成员的指针变量的一般形式为  数据类型名 *指针变量名; 2、指向对象成员函数的指针  C++定义指向对象成员函数的指针变量的方法,与定义指向普通函数的指针变量方法有所不同

73620
您找到你想要的搜索结果了吗?
是的
没有找到

c++对象特性和this指针

,属于类的对象上 void func() {}//非静态成员函数,不属于类的对象上 static int a;//静态成员变量,共享一份,不属于类的对象上 static void fun()...{}//静态成员函数,共享一份,不属于类的对象上 }; int main() { wood d; //空对象占用内存空间:1 //是为了区分空对象占内存的位置 cout << sizeof...,不算类对象内存大小 cout << sizeof(d) << endl; system("pause"); return 0; } this指针 this指针指向被调用的成员函数所属的对象...this指针是隐含每一个非静态成员函数类的指针 this指针无需定义可直接使用 用途: 1.当形参和成员变量相同时,可用this进行区分 2.在类的非静态成员中返回对象本身,可用return this...w1的num,一个是w2的num //this指向w2的指针,而*this指向的就是w2这个对象本体 return *this; } }; int main() { wood w1(10);

21510

Golang之面向对象指针

package main import "fmt" type Integer int //为内置的int类型增加了新方法less,面向对象写法 func (a Integer) Less(b Integer...bool { return a < b } func Integer_Less(a Integer, b Integer) bool { return a < b } //Go的面向对象...,如果需要修改对象,必须用指针,这不是Go约束,还是自然约束 func (a *Integer) Add(b Integer) { *a += b } //Integer类型是一个int,为int...,需要指针引用 //a.Add(2) //fmt.Println("a=", a) //实现成员方法传入的如果不是指针,而是值,也就是Integer,而非*Iteger,,这时a...this指针 方法施加的目标(“对象”)显示传递,没有被隐藏 方法施加的目标(“对象”)不需要非得是指针,也不用非得叫this */  大郎说,烧饼放在家里了 //值语义和引用语义 //b=a //b.Modify

37740

C++对象模型和this指针详解

这篇文章主要介绍了详解C++对象模型和this指针,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助对象模型成员变量和成员函数分开存储一、只有非静态成员变量才属于类的对象上空对象占用字节为...voidfunc(){}静态成员函数也不会增加 不属于类对象上this指针用于区分类中多个对象调用函数时,分别都是哪个函数在调用自己。...this 指针指向被调用成员函数所属的对象特点:1. this指针是隐含每一个非静态成员函数内的一种指针2.this 指针不需要定义,直接使用即可。...用途:1.当形参和成员变量同名时,可用this指针来区分2.在类的非静态成员变量中返回对象本身,可使用return *this一、class Person{public:Person(int age)/.../变量{//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决和变量的名称冲突this->age = age;//前一个为成员变量,后一个age为形参}int age;};void

20600

【c++】类和对象(二)this指针

每个对象都有自己独立的一套成员变量,占用各自的内存空间 因此,当成员函数Print()通过this指针(隐式指向当前对象)访问这些成员变量时,它实际上访问的是调用这个成员函数的那个==特定对象(实例...这里就与隐含的this指针有关了 this指针是面向对象编程语言中的一个特殊指针,它指向调用成员函数的那个对象。通过this指针,成员函数可以访问调用它的那个对象的成员变量和成员函数。...this指针是隐式传递给成员函数的,是成员函数的一个隐含参数 可以理解为,编译器处理后处理为上述的样子,调用的地方,编译器也会处理: 它会把调用对象当做形参进行传递 这里我们也能知道,为什么...在上述的讲解后,我们能够推出this指针的存储位置:this是一个形参,它指向调用该成员函数的对象,this指针在成员函数调用时需要被快速访问并用于访问对象的成员,所以我们推测它存储在栈上 为了提高访问速度...这种特殊情况下,代码可运行,主要是因为成员函数的调用并没有实际依赖于this指针指向的对象实例的状态 因为PrintA()不访问对象的任何成员变量,所以这个调用在技术上不需要访问通过this指针指示的内存地址

6910

C++函数指针和std::function对象

C++函数指针和std::function对象 这篇博文中通过实现对String字符串大小写转换为列来说明C++中函数指针和std::function对象的使用。...下面我们分别使用函数指针的方式和C++ 11中的std::function对象进行实现。本文不对std::function的优点进行介绍,这是以一个简单示例进行入门介绍。...函数指针 头文件: 头文件实现中我们使用了typedef定义了一个函数指针类型,当然我们也可以使用using关键字进行定义,两者类似。...String::map函数用于对字符串进行遍历操作,然后通过传进来的函数指针对每个字符进行操作。...这里我们的std::function对象类型的返回值和参数列表都是char。 (为什么不跟前面一样都用int呢?不感兴趣的可以忽略这一段。

2.4K30

iOS 程序内存指针对象的理解

最近对指针和内存有产生了浓厚的兴趣,然后就想研究一下iOS 程序指针内存对象这些东西都是怎么关联在一起的呢,又是怎么工作的呢。...一、指针 首先先说一下指针:         弄懂指针对以后编程效率有大大滴帮助,大学第一个编程语言C语言,两节C语言指针我一直记忆犹新。...云里雾里,那时候我就知道指针是个好东西,但我控制不住它,它会给我惹好多麻烦。         指针是其实也是一个对象,它指向一个内存地址单元,内存单元里存着各种变量。...强引用:一个指针对象持有一个内存地址,内存地址是跟强引用的那个指针共存亡的。指针就像风筝的线,如果这个指针不指向了这个内存地址,风筝就会飞走了,内存地址就会被存储器干掉。...retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。

87920

C++对象模型和this指针实例分析(二)

指针访问成员函数 C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性 示例: //空指针访问成员函数 class Person...: 声明对象前加const称该对象为常对象对象只能调用常函数 示例: //常函数 class Person { public: Person() { m_A = 0; m_B = 0;...} //this指针的本质是一个指针常量,指针的指向不可修改 //如果想让指针指向的值也不可以修改,需要声明常函数 void ShowPerson() const { //常函数本质:const...this指针指针常量,this指针指向的对象的数据是可以修改的,但是加上const声明为常函数后其值也不可以修改了。...= 100; //但是常对象可以修改mutable修饰成员变量 //常对象访问成员函数 person.MyFunc(); //常对象不能调用普通成员函数,因为普通成员函数可以修改属性。

14820

「类与对象」说一说isa指针

概要 在讲isa指针前,我们先来看一道经典的面试题: 对象的isa指针指向哪里? 看到这道题,心中可能朦朦胧胧有些答案,也可能不太确定,抑或说不明白。那咱就带着这个问题,揭开isa指针的神秘面纱。...isa的作用 在文章NSObject对象的分类中,详细讲解了isa指针的指向、如何寻找实例方法和类方法以及如何通过isa指针找到类对象和元类对象的。...基本总结一下,instance对象的isa指向instance对象所对应的Class对象,Class对象的isa指向Class对象所对应的MetaClass对象。...isa结构变化 在ARM 32位的时候,isa的类型是Class类型的,直接存储着实例对象或者类对象的地址, 具体结构如下所示: typedef struct objc_class *Class; typedef...isa中的位域 nonpointer:占用1bit 0,代表普通的指针,存储着Class、Meta-Class对象的内存地址; 1,代表优化过,使用位域存储更多的信息; has_assoc:占用1bit

66620

C++对象模型和this指针实例分析(一)

C++对象模型和this指针 成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person { public: Person...this指针概念 通过4.3.1我们知道在C++中成员变量和成员函数是分开存储的 每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码 那么问题是:这一块代码是如何区分那个对象调用自己的呢...c++通过提供特殊的对象指针,this指针,解决上述问题。...this指针指向 被调用的成员函数 所属的对象 this指针是隐含每一个非静态成员函数内的一种指针 this指针不需要定义,直接使用即可 this指针的用途: 1.解决名称冲突:当形参和成员变量同名时...this指针指针常量,this指针指向的对象的数据是可以修改的,但是加上const声明为常函数后其值也不可以修改了。

25420

让类成员函数指针成为可调用对象

类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象。     ...),function判断如果是类成员函数指针,则会将通过该对象使用成员访问运算符,实现类成员函数指针的调用功能(具体function如何判断是类成员函数指针还是普通函数指针,本人现在不清楚,如果有理解错误地方望指正...在可调用对象里有接收对象对象指针的一组调用运算符重载函数,可使用对象对象指针调用该成员函数,使用方式与function相同: // main.cpp,头文件a.h与源文件a.cpp之前相同 #... // mem_fn通过成员函数指针自动推导可调用对象类型     fnt(a); // 使用对象调用成员函数     fnt(&a); // 使用对象指针调用成员函数     return 0; }...类似,生成的可调用对象有接收对象对象指针的一组重载调用运算符函数: // main.cpp,头文件a.h与源文件a.cpp之前相同 #include  #include "a.h

1K40

C++的函数对象优于函数指针地方

在这里我们介绍的则是一种类似于函数指针的C++函数对象的相关介绍。C++函数对象不是函数指针。但是,在程序代码中,它的调用方式与函数指针一样,后面加个括号就可以了。...这是入门级的随笔,说的是函数对象的定义,使用,以及与函数指针,成员函数指针的关系。 C++函数对象实质上是一个实现了operator()--括号操作符--的类。...下面是函数对象与函数指针的例子: namespace { class AddCls { public: int operator()(int a, int b) {...既然C++函数对象与函数指针在使用方式上没什么区别,那为什么要用函数对象呢?很简单,函数对象可以携带附加数据,而指针就不行了。...,也能接受函数对象,最方便的方法就是用模板。

68640

「类与对象」说一说isa指针

在讲isa指针前,我们先来看一道经典的面试题: 对象的isa指针指向哪里? 看到这道面试题,心中可能朦朦胧胧有些答案,也可能不太确定,抑或说不明白。 那咱就带着这个问题,揭开isa指针的神秘面纱。...isa的作用 在文章NSObject对象的分类中,详细讲解了isa指针的指向、如何寻找实例方法和类方法以及如何通过isa指针找到类对象和元类对象的。...以及instance对象的isa指向instance对象所对应的Class对象,Class对象的isa指向Class对象所对应的MetaClass对象。...isa结构变化 在ARM 32位的时候,isa的类型是Class类型的,直接存储着实例对象或者类对象的地址, 具体结构如下所示: typedef struct objc_class *Class; typedef...isa中的位域 1.nonpointer:占用1bit; 0,代表普通的指针,存储着Class、Meta-Class对象的内存址; 1,代表优化过,使用位域存储更多的信息; 2. has_assoc:

33520

面向对象之this指针与类中的枚举类型

this指针与类中的枚举类型 1.this指针 相信在坐的很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在类中的使用!...首先来谈谈this指针的用处: (1)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。...其次,this指针的使用: (1)在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this。 (2)当参数与成员变量名相同时,如this->n = n (不能写成n = n)。...this是类的指针,如果换成结构,那this就是结构的指针了。 2.类中的枚举类型 有时我们希望某些常量只在类中有效。...const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。 不能在类声明中初始化 const 数据成员。

1.1K10

函数指针、函数对象、lambda 表达式、std::function

函数指针 函数指针就是指向函数地址的指针 int Sum(int a, int b) { return a + b; } typedef int(*SumFunc)(int x, int y)...函数对象 重载了 operator() 的类对象: class SumClass { public: SumClass(int padding): padding(padding){} int...Lambda 表达式 lambda 表达式内部会创建一个上面所说的函数对象, 不过是匿名的, 只有编译器知道类名是什么. lambda 可以捕获外部的变量, 都会转换为匿名函数对象的属性值来保存. int...: 函数指针 类成员函数指针 (如使用 std::bind 传递) 函数对象(定义了 operator() 操作符的类对象) 既然能包装这些类型, 也相当于可以从这些类型转换过来: class TestClass...{ public: int Sum(int x, int y) { return x + y; } }; // --------------------- // 包装函数指针 std

98730

为什么我应该使用指针而不是对象本身

我发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 而不是, Object myObject; 或者在调用成员函数的时候,都会这样...什么时候该使用指针对象生命周期 上面两种创建对象的语句有什么不同呢? 对于 Object myObject;,该对象被创建在栈上,它的特点就是脱离作用域后会自动销毁。...这个时候,你就可以通过指针。不过 C++ 11 已经有了移动(move)语义,这个问题就不用担心了。 多态(polymorphic): 对于多态类型,指针和引用可以避免对象被切片(slice)。...切片的意思就是说:在函数传参处理多态变量时,如果一个派生类对象在向上转换(upcast),用的是传值的方式,而不是指针和引用,那么,这个派生类对象在 upcast 以后,将会被 slice 成基类对象,...你想通过解耦编译单元来减少编译时间: 如果对象都是指针指向的,那么只需要这个类型的前向声明就可以。这可以分离编译过程的各个部分,会显著提高编译时间。

1.3K10

函数指针、函数对象、lambda 表达式、std::function

函数指针 函数指针就是指向函数地址的指针 int Sum(int a, int b) { return a + b; } typedef int(*SumFunc)(int x, int y)...函数对象 重载了 operator() 的类对象: class SumClass { public: SumClass(int padding): padding(padding){} int...Lambda 表达式 lambda 表达式内部会创建一个上面所说的函数对象, 不过是匿名的, 只有编译器知道类名是什么. lambda 可以捕获外部的变量, 都会转换为匿名函数对象的属性值来保存. int...: 函数指针 类成员函数指针 (如使用 std::bind 传递) 函数对象(定义了 operator() 操作符的类对象) 既然能包装这些类型, 也相当于可以从这些类型转换过来: class TestClass...{ public: int Sum(int x, int y) { return x + y; } }; // --------------------- // 包装函数指针 std

66130
领券