C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数

这篇具有很好参考价值的文章主要介绍了C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数,c++,开发语言,visualstudio

#include<iostream>
using namespace std;

//成员变量 和 成员函数 分开储存的
class Person {
public:
    Person() {
        mA = 0;
    }
    //非静态成员变量占对象空间
    int mA;
    //静态成员变量不占对象空间
    static int mB;
    //函数也不占对象空间,所有函数共享一个函数实例
    void func() {
        cout << "mA:" << this->mA << endl;
    }
    //静态成员函数也不占对象空间
    static void sfunc() {
    }
};
int Person::mB = 0;

void test01()
{
    Person p;
    //空对象占用内存空间:1
    //C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
    //每个空对象也应该有一个独一无二的内存地址
    cout <<"size of p =" <<sizeof(p) << endl;
}

void test02()
{
    Person p;
    cout <<"size of p =" <<sizeof(p) << endl;
}

int main() {

    //test01();
    test02();

    system("pause");

    return 0;
}文章来源地址https://www.toymoban.com/news/detail-828521.html

C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数,c++,开发语言,visualstudio

#include<iostream>
using namespace std;

class Person
{
public:

    Person(int age)
    {
        //1、当形参和成员变量同名时,可用this指针来区分
        //this指针指向 被调用的成员函数 所属的对象
        this->age = age;
    }

    Person& PersonAddPerson(Person p)
    {
        this->age += p.age;
        //返回对象本身
        //this指向p2的指针,而*this指向的就是p2这个对象的本体
        return *this;
    }

    int age;
};

void test01()
{
    //1.解决名称冲突
    Person p1(10);
    cout << "p1.age = " << p1.age << endl;
    //2.返回对象本身用*this
    Person p2(10);
    //链式编程思想
    p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
    cout << "p2.age = " << p2.age << endl;
}

int main() {

    test01();

    system("pause");

    return 0;
}

C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数,c++,开发语言,visualstudio

#include<iostream>
using namespace std;

//空指针调用成员函数
class Person
{
public:

    void ShowClassName()
    {
        cout << "我是Person类!" << endl;
    }

    void ShowPersonAge()
    {
        if (this == NULL)
        {
            return;
        }
        //报错原因是传入的指针为NULL
        cout << this->mAge << endl;
    }

public:
    int mAge;
};

void test01()
{
    Person * p = NULL;
    p->ShowClassName(); //空指针,可以调用成员函数
    p->ShowPersonAge();  //但是如果成员函数中用到了this指针,就不可以了
}

int main() {

    test01();

    system("pause");

    return 0;
}

C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数,c++,开发语言,visualstudio

#include<iostream>
using namespace std;

//常函数
class Person
{
public:
    Person()
    {
        m_A = 0;
        m_B = 0;
    }

    //this指针的本质是一个指针常量,指针的指向不可修改
    //const Person * const this
    //在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
    void ShowPerson() const
    {
        //this = NULL;    //this指针不可以修改指针的指向   Person* const this;
        //this->mA = 100; //但是this指针指向的对象的数据是可以修改的

        //const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量
        this->m_B = 100;
    }

    void MyFunc()
    {
        mA = 10000;
    }

public:
    int m_A;
    mutable int m_B; //特殊变量,即使在常函数中,也可以修改这个值
};


//const修饰对象  常对象
void test01() {

    const Person person; //在对象前加const,变为常对象  
    cout << person.m_A << endl;
    //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问
    person.m_B = 100;  //但是常对象可以修改mutable修饰成员变量

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

int main() {

    test01();

    system("pause");

    return 0;
}

到了这里,关于C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】:类和对象(上)+ this指针

    【本节目标】 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C++是基于面向对象

    2024年02月08日
    浏览(27)
  • C++:类和对象(上)---初步认识类和this指针

    C语言是一门面向过程的语言关注的是过程,确认一个问题求解的步骤,再一步一步对它进行解决 C++是一门基于面向对象的语言,它更关注的是对象,将一个事情分成不同的对象,再用对象完成问题的解决 在C语言中有结构体,但结构体中只能定义变量,而在C++中还可以定义函

    2024年02月16日
    浏览(25)
  • 【C++】类和对象详解(类的使用,this指针)

    提示:这里可以添加本文要记录的大概内容: 在计算机编程领域,程序设计的方法论不断演化,从最初的面向过程到如今更为强大而灵活的面向对象。本文将深入探讨C++中关于类和对象的概念,为读者提供对面向对象编程的深刻理解。 提示:以下是本篇文章正文内容,下面

    2024年02月02日
    浏览(25)
  • C++ 类和对象(一)类、访问限定符、this指针

            C++中的类(class)是实现数据抽象和面向对象程序设计的核心。本文作为类和对象的开篇,将介绍有关类的基础知识,之后会持续更新类和对象的深入内容。 目录 前言 1 类的引入 2 类的定义 3 访问限定符和封装 3.1 访问限定符 3.2 封装 4 类的实例化及类对象的储存

    2024年02月10日
    浏览(25)
  • 【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作

    2024年03月11日
    浏览(32)
  • 【C++】类和对象(中篇)----->六大默认成员函数

    目录 一、类的6个默认成员函数 二、构造函数  1、概念   2、特性 三、析构函数  1、概念  2、特性 四、拷贝构造函数  1、概念  2、特征 五、赋值运算符重载  1、运算符重载  2、值运算符重载    2.1 赋值运算符重载格式    2.2 赋值运算符只能重载成类的成员函数不能

    2024年02月12日
    浏览(31)
  • C++ ------类和对象详解六大默认成员函数

    如果我们定义一个类,然后这个类中什么也没有。那么这里的类就什么也没有吗?其实不然,任何类在里面什么都不写时,编译器都会生成6个默认成员函数。 用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 六个默认成员函数 我们来看一个Date类 观察上述代

    2024年02月15日
    浏览(31)
  • 【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)

    🔥 个人主页: Forcible Bug Maker 🔥 专栏: C++ 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性及用法 析构函数 概念 析构函数的特性及用法 结语 本篇主要内容:类的6个默认成员函数中的 构造函数 和 析构函数 进入到类和对象内容的第二节,上篇博客中介绍了

    2024年04月16日
    浏览(40)
  • 【C++类和对象】类有哪些默认成员函数呢?(下)

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 如果一个类中什么成员都没有,简称为空类。 空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 ​​​​​​​​ 默认成员函数:用户没有显式实现,编译器会生成

    2024年02月12日
    浏览(34)
  • C++:常成员变量、常成员函数、常对象

    常成员变量: 1.用const修饰,可位于类型前后,若是成员变量类型为指针则只可位于类型后。 即:int  *const  p; 2.只能通过构造函数的初始化表对常成员变量进行初始化。 3.常成员所在类中的所有构造函数都必须对常成员变量初始化(通过初始化表)。 4.常成员变量可以被访

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包