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

简介: 空指针访问成员函数C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针如果用到this指针,需要加以判断保证代码的健壮性示例://空指针访问成员函数class Person {public: void ShowClassName() { cout << "我是Person类!" << endl;


空指针访问成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针

如果用到this指针,需要加以判断保证代码的健壮性

示例:

//空指针访问成员函数

classPerson {

public:

   voidShowClassName() {

       cout<<"我是Person类!"<<endl;

   }

   voidShowPerson() {

       if (this==NULL) {

           return;

       }

       cout<<mAge<<endl;

   }

public:

   intmAge;

};

voidtest01()

{

   Person*p=NULL;

   p->ShowClassName(); //空指针,可以调用成员函数

   p->ShowPerson();  //但是如果成员函数中用到了this指针,就不可以了,需要做判断是否是空指针,增强代码健壮性

}

intmain() {

   test01();

   system("pause");

   return0;

}

const修饰成员函数

常函数:

  • 成员函数后加const后我们称为这个函数为常函数
  • 常函数内不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象:

  • 声明对象前加const称该对象为常对象
  • 常对象只能调用常函数

示例:

//常函数

classPerson {

public:

   Person() {

       m_A=0;

       m_B=0;

   }

   //this指针的本质是一个指针常量,指针的指向不可修改

   //如果想让指针指向的值也不可以修改,需要声明常函数

   voidShowPerson() const {

       //常函数本质:const Type* const pointer;常函数的const本身修饰的是this指针,导致指针指向的值和地址都不可改。

       

       //this = NULL; //不能修改指针的指向 Person* const this;

       //this->mA = 100; //mA = 100在本函数中的本质是this->mA = 100其中this指针是指针常量,this指针指向的对象的数据是可以修改的,但是加上const声明为常函数后其值也不可以修改了。

       //const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量

       this->m_B=100;

   }

   voidMyFunc() const {

       //mA = 10000;

   }

public:

   intm_A;

   mutableintm_B; //可修改 可变的

};

//const修饰对象  常对象

voidtest01() {

   constPersonperson; //常量对象  

   cout<<person.m_A<<endl;

   //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问

   person.m_B=100; //但是常对象可以修改mutable修饰成员变量

   //常对象访问成员函数

   person.MyFunc(); //常对象不能调用普通成员函数,因为普通成员函数可以修改属性。

}

intmain() {

   test01();

   system("pause");

   return0;

}

PS:加上const指向和值都不可以修改了。


CtrlX
+关注
目录
打赏
0
0
0
0
4
分享
相关文章
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
6月前
|
C++之类与对象(完结撒花篇)(上)
C++之类与对象(完结撒花篇)(上)
64 0
|
3月前
|
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
117 19
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
123 13