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指向和值都不可以修改了。


目录
相关文章
|
21天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
30 0
|
24天前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
254 0
|
1天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
1天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
2天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
2天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
21天前
|
编译器 C语言 C++
【c++】类和对象(三)构造函数和析构函数
朋友们大家好,本篇文章我们带来类和对象重要的部分,构造函数和析构函数
|
21天前
|
存储 编译器 C语言
【c++】类和对象(二)this指针
朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解this指针
【c++】类和对象(二)this指针
|
21天前
|
存储 编译器 C语言
【c++】类和对象(一)
朋友们,大家好,本篇内容我们来对类和对象进行初步的认识
|
22天前
|
设计模式 算法 中间件
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
109 1

热门文章

最新文章