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

【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...void fun(int age, int height) const const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 ; C++ 编译器会将 void...函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量 ; class Student { public: void fun.../ // const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student

23020

第 19 章 特殊工具与技术

{ return &Screen::contens; } // 其他成员与之前的版本一致 }; 同样的也可以定义指向类的成员函数的指针,最简单的方法是使用 auto来推断类型。...对于其他语言编写的函数来说,编译器生成的代码会有所不同,C++使用链接指示指出任意非 C++函数使用的语言。 链接指示可以有两种形式:单个的或符合的。...指向 C函数的指针已指向 C++函数的指针是不一样的类型。...因为链接指示同时作用于声明语句中的所有函数,所以如果我们希望给 C++函数传入一个指向 C函数的指针,则必须使用类型别名。...void FC(int); // f2是一个 C++函数,该函数的形参是指向 C函数的指针 void f2(FC *); 通过使用链接指示对函数进行定义,我们可以令一个 C++函数在其他语言编写的程序中可用

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

    第 19 章 特殊工具与技术

    { return &Screen::contens; } // 其他成员与之前的版本一致 }; 同样的也可以定义指向类的成员函数的指针,最简单的方法是使用 auto来推断类型。...对于其他语言编写的函数来说,编译器生成的代码会有所不同,C++使用链接指示指出任意非 C++函数使用的语言。 链接指示可以有两种形式:单个的或符合的。...指向 C函数的指针已指向 C++函数的指针是不一样的类型。...因为链接指示同时作用于声明语句中的所有函数,所以如果我们希望给 C++函数传入一个指向 C函数的指针,则必须使用类型别名。...void FC(int); // f2是一个 C++函数,该函数的形参是指向 C函数的指针 void f2(FC *); 通过使用链接指示对函数进行定义,我们可以令一个 C++函数在其他语言编写的程序中可用

    75140

    《C++Primer》第十九章

    枚举类型 C++包含两种枚举:限定作用域和不限定作用域的。C++新标准引入了限定作用域的枚举类型。...成员指针是指可以指向类的非静态成员的指针。...&Screen::get_cursor; 指向成员函数的指针也需要指定目标函数的返回类型和形参列表 如果成员函数是const成员或引用成员,我们必须将const限定符或者引用限定符包含进来 如果成员存在重载的问题...3.1 声明一个非C++函数 // cstring头文件中C函数的声明 // 单语句链接指示 extern "C" size_t strlen(const char *); // 复合语句链接指示 extern...3.3 指向extern "C"函数的指针 // pf指向一个C函数, 该函数接受一个int返回void extern "C" void (*pf)(int); 指向C函数的指针和指向C++函数的指针是不一样的类型

    1.4K10

    C++学习————第四天(类、this指针)

    类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名 :: 类域 一般情况下 都会在变量一般都是加个前缀或者后缀标识区分就行 比如: 4.类的访问限定符及封装...编译器通过下面 注释部分去完成操作 C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有...只能在“成员函数”的内部使用 3. this指针本质上是“非静态成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...例如: \ 3、返回指向对象的指针 在成员函数中,如果想要返回指向对象的指针,就可以使用this指针。...2.this关键字只能用于成员函数,不能用于被static修饰的函数(静态函数),因为静态成员函数没有this指针,它们仅能访问静态数据成员和静态成员函数 3.在C++中,this关键字是一个指向对象自己的一个指针

    9710

    【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

    一、全局函数 与 成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 类的 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 这个增加的参数是 对象本身的指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数中 , 通过 this 指针访问对象本身的成员 ; 在全局函数中 , 实现两个 Student 类相加 , 接收两个...// this 是指针 , *this 是指针指向的 自身对象 return *this; } 返回 引用 , 就是返回自身对象 ; this 是指针 , *this 是指针指向的 自身对象...this->height + s2.height; // 注意 : 返回的是一个引用 , 就是返回自身对象变量 // this 是指针 , *this 是指针指向的 自身对象 return

    23820

    【C++ 类和对象 基础篇】—— 抽象思维的巅峰舞者,演绎代码的深邃华尔兹

    在 C++ 中,访问限定符用于控制类的成员(包括数据成员和成员函数)的可访问性。...因此,成员函数并不占用每个对象的存储空间。 虚函数表指针(对于多态类): 如果类包含虚函数,编译器通常会在对象中存储一个指向虚函数表(vtable)的指针,用于实现运行时多态。...只能用于非静态成员函数:静态成员函数不属于任何具体对象,因此没有 this 指针。 常量性:this 指针本身是不可修改的,它只能指向当前对象。...C++中数据和函数都封装到了类里面,通过访问限定符进行了、限制,不能再随意通过对象直接访问数据,这是C++封装的⼀种体现,这个是最重要的变化。...2、对象:类实例化产物,大小受成员变量及内存对齐影响,体现类的具体化。 3、this 指针:非静态成员函数里指向当前对象,用于区分变量,静态函数无,本质特殊且有存储传递方式。

    41110

    C++学习知识点

    C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖,模板。 2.类的特征 答:封装、继承和多态。 3. C++与C#的区别 (1)C++中类的申明时,不能给数据成员赋值,通常使用构造函数来完成。...(5)C++中有指针类型,而C#中没有指针类型,C#中的delegate类型本质上就是C++中的函数指针,通俗来说就是类型化了函数指针,用于函数的回调。 4....C++中的接口就是类的成员虚函数。实现多态性,通过指向派生类的基类指针,访问派生类中同名重定义的成员虚函数。 9....深拷贝存在的情况就是在类成员中有非基本数据类型的变量时,比如指针,数组或者引用。...(2)对于成员函数时,若运算符为单目的,则无参数;若运算符为双目的,则有一个参数, 第一个操作数应为成员函数所属类类型。

    1.7K20

    this指针用法及其深究

    这个么,空口无凭,我现在来举一个例子: 我们知道对于一个类来说,要有很多工作要做,其中类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢...,这时c++中的this指针就应用而生了 注: 每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。...} int main() { text01(); text02(); return 0; } 主要的用途 当形参和成员变量同名时,可用this指针来区分 在类的非静态成员函数中返回对象本身...,可使用return *this 总结 通过上面我们知道在C++中成员变量和成员函数是分开存储的 每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码 c++通过提供特殊的对象指针...this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针 this指针不需要定义,直接使用即可 最后:this指针指向被调用的成员函数所属的对象 喜欢的,支持一下新人吧

    26440

    【C++指南】类和对象(一):类和对象的定义和使用 基础讲解

    4. this指针 this 指针是 C++ 中一个非常重要的概念,它指向调用成员函数的对象。每个非静态成员函数都有一个 this 指针,它允许成员函数访问调用对象的成员变量和其他成员函数。...存在性:在类的非静态成员函数中,this 指针是自动定义的,不需要用户显式声明也不可以。...注意事项 静态成员函数:静态成员函数没有 this 指针,因为它们不属于任何对象,而是属于整个类。 在构造函数和析构函数中的使用:在构造函数中,this 指针指向正在被构造的对象。...在析构函数中,this 指针指向正在被析构的对象。 返回 *this 的注意事项:当成员函数返回 *this 时,需要注意返回值的类型应该是类的引用或指针,以避免不必要的对象复制。...它始终指向调用对象。 结语 本文介绍了C++中类和对象的基本概念,包括类的定义、访问限定符的作用、class和struct的使用区别、对象的定义和使用、对象的大小以及this指针的概念和用途。

    16410

    【C++修炼之路】C++类与对象:面向对象编程的第一步

    类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。 类的两种定义方式: 1....五、this指针 在C++中,this指针是一个隐含的指针,它指向当前对象的地址。每个非静态成员函数(包括构造函数和析构函数)都可以通过this指针访问调用该函数的对象。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问...5.2 this指针的特性 隐含指针: 每个非静态成员函数都有一个隐含的this指针,指向调用该函数的对象。 类型: this指针的类型是ClassName*(指向当前类类型的指针)。...在const成员函数中,this指针的类型是const ClassName*。 不可修改: this指针本身是常量指针,不能被修改(即不能指向其他对象)。

    5310

    【C++】类和对象(上)

    在开始具体的类之前我们先来看看类的访问限定 C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用 访问限定符说明 public...注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 C++中struct和class的区别是什么❓ C++需要兼容C语言,所以C++中struct可以当成结构体去使用。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问...** this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递 const Date*p1;//const修饰指针指向的对象....为什么❓成员函数不存在对象里,存在于常量区(代码段),编译器调用函数时P不会到p指向的对象里找Print()地址. 不发生解引用,因为成员函数的地址不在对象中,在公共代码区域。

    50120

    C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)

    C++ 中有三种访问限定符: public(公有): 成员在类的内部和外部都可以被访问。 protected(保护): 成员在类的内部和派生类(子类)中可以被访问,但不能在类的外部直接访问。...例如,Pa是一个指向A类对象的指针,则在表达式Pa->M中,M具有类A的作用域。 在使用作用域运算符所限定的该成员中。例如,在表达式A::M中,M具有类A的作用域。...在C++中,当你有一个类(比如Date类)并且这个类有成员函数(比如Init和Print),编译器确实为每个非静态成员函数增加了一个隐藏的指针参数this。...在C++中,编译器为每个非静态成员函数隐式地传递一个名为this的指针,该指针指向调用该函数的对象。 这使得成员函数能够知道它们应该操作哪个对象的数据成员。这个过程对用户是透明的。...在 C++ 中,当你有一个指向对象的指针,并试图通过该指针调用成员函数时,编译器会生成代码来隐式地传递一个指向该对象的 this 指针给成员函数。

    16110

    类和对象(1)

    类的引入 c++中结构体不仅可以定义变量,还能定义函数,而在c语言中结构体只能定义变量。现在以c++方式实现,发现struct也可以定义函数。...类的定义 class ClassName { //由成员函数和成员变量组成 }; 类体中的内容称为类的成员,类的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。...c++中通过引入this指针来解决这个问题: c++给每个非静态的函数一个this指针,通过指向当前对象(函数运行时调用的对象),所有成员变量的操作,都是通过指针去访问。...->_day = day; } 特性 1 类类型*const,不能给this指针赋值(const*修饰的是指向的对象,*const修饰的是指针本身) 2 本质上是成员函数的形参,当对象调用成员函数时,...c++ c++中通过类,可以将数据以及操作数据的方法完美结合,通过访问权限可以控制那些方法在类外的函数可以被调用,即封装。C++中 Stack *是编译器自己维护的,而c语言中是需要用户进行维护的。

    7010

    【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类 , 无法在 类外部调用 父类的 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则...指向 子类对象 定义 一个子类对象 Child child ; 定义父类的指针 , 将 指针 指向 子类对象 的地址 , 这是合法的 ; 代码示例 : // 父类对象 Parent parent...// 子类对象 可以调用 父类公有函数 child.funParent(); // 将指向子类对象的指针传给接收父类指针的函数 // 也是可以的 fun_pointer...// 通过父类指针调用父类函数 p_parent->funParent(); // 将指向子类对象的指针传给接收父类指针的函数 // 也是可以的 fun_pointer

    30920

    C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针

    比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数 之前c: struct Stack { int* a; int...类体中内容称为类的成员:类中的变量称为类的属性或成员变量 ; 类中的函数称为类的方法或者成员函数。...Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象 C++中通过引入this指针解决该问题,...即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。...* 只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。

    14710

    【C++】初识类和对象

    类的引入 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。...比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问...只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。 9.2 this指针的特性 this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。

    14710

    C++初阶——类和对象

    呀哈喽,我是结衣 C++入门之后,我们就进入了C++的初阶的学习了,在了解类和对象之前,我们还是先了解,面向过程和面向对象的初步认识。...比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。...类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。 下面我们来讲解,类的两种定义方式。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。

    8410

    【C++初阶】—— 类和对象 (上)

    初步认识C++ 1. 我们知道之前学习的C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 2....为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略 类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数 类的两种定义方式: 声明和定义全部放在类体中...,那么C++中多了个函数该怎么计算呢,我们先来看看结果 初步结论: 类的成员函数不算在类的大小中 类的大小遵守结构体内存对齐规则 类对象的存储方式 好家伙,两个类结果居然是一样的,这到底是什么情况...C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问 this指针的特性 this指针的特性...: this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

    7210

    【C++从小白到大牛】类和对象

    比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。...四、类的访问限定符 访问限定符 C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用 【访问限定符说明】 public修饰的成员在类外可以直接被访问...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问...类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问 4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员 5....问题: 1、静态成员函数能调用非静态成员函数吗? 答:不可以,因为静态成员函数没有this指针,同样也不能访问非静态成员变量 2、非静态成员函数能调用静态成员函数吗?

    8110

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券