当前位置: 首页 > news >正文

C++——类和对象的相关知识点

       一、类的定义方法

        在C++中,类将成员变量和成员函数组合成一个整体。类有两种定义方式:

        1.声明和定义全部放在类体中,如

class Abc
{
public:
//成员函数void Init()//初始化{_a = 0;_b = 1;_c = 2;}void Print()//打印{cout << _a << " " << _b << " " << _c << endl;}private:
//成员变量int _a;int _b;int _c;
};

        2.成员函数声明和定义分开放。声明放在.h文件中,定义放在.cpp文件中。定义时要在函数名前面加上类名,明确是哪个类中的函数。

//Abc.h文件
#include <iostream>
using namespace std;class Abc
{
public:
//成员函数只写声明void Init();void Print();private:int _a;int _b;int _c;
};
//Abc.cpp文件
#include "Abc.h"void Abc::Init()
{_a = 0;_b = 1;_c = 2;
}void Abc::Print()
{cout << _a << " " << _b << " " << _c << endl;
}

        二、类的访问限定符 

        其中,public和private是C++的类的访问限定符。被public修饰的内容在类里面和类外面都可以访问,而被private修饰的内容只能在类里面访问。如以上例子,可以通过公开的函数对类进行操作,但无法直接修改_a等成员变量,保证了数据的安全性。

        在C++中,struct被升级成为类。如果类中没有指定,那么struct的默认访问权限是public,class的默认访问权限是private。

        访问限定符是实现类的封装性的很重要的机制,访问限定符通过控制成员的可见范围,直接支撑了封装性中“隐藏内部细节、暴露安全接口”的目标。

        而类中的成员变量其实只是一个声明,并没有在内存中开空间来存储它。所以想要使用类时,要对类进行实例化。被实例化出来的对象才占有内存空间。类似于定义出来的类只是一张房子设计图,但是纸上不能住人;而对象实例化是拿着设计图去建房子,建造出来的房子里面可以住人。

int main()
{Abc d;//对象实例化d.Init();d.Print();return 0;
}

        三、this指针

        对于以下代码,Init函数中并没有关于不同对象的区分,为什么初始化的结果是正确的呢,函数是如何分辨当前就是初始化d1,而不是初始化d2嘞?

class Abc
{
public:void Init(int a, int b, int c){_a = a;_b = b;_c = c;}private:int _a;int _b;int _c;
};int main()
{Abc d1;d1.Init(1, 2, 3);Abc d2;d2.Init(4, 5, 6);return 0;
}

        C++中提供了this指针。它是一个隐含存在于类的非静态成员函数中的特殊指针,它指向当前调用该函数的对象。即编译器调用Init函数时,应该是这样:

void Init(int a, int b, int c)
{this->_a = a;this->_b = b;this->_c = c;
}

        且C++规定,this指针不可以显示的传,但是可以在函数体内使用。

   

http://www.dtcms.com/a/276704.html

相关文章:

  • 复习笔记 31
  • RHCSA(2)
  • STM32--USART串口通信的应用(第一节串口通信的概念)
  • docker网络与数据持久化
  • SolidWorks并发不足频出,浮动许可还能怎么优化?
  • Python 中 enumerate(s) 和 range() 的对比
  • 博途多重背景、参数实例--(二)
  • 分布式系统高可用性设计 - 缓存策略与数据同步机制
  • 飞算JavaAI:重新定义Java开发效率的智能引擎
  • Cell2location maps fine-grained cell types in spatial transcriptomics 文章解析
  • 基于Python Keras 实践大全
  • STP生成树协议
  • 堆内存的详细结构以及java中内存溢出和排查方式
  • Jinja2模板引擎技术在dify中的应用方法
  • Python基于Django的WEB服务统一身份认证协议的设计与实现【附源码、文档说明】
  • 3 c++提高——STL常用容器(一)
  • 【理念●体系】路径治理篇:打造可控、可迁移、可复现的 AI 开发路径结构
  • 【一起来学AI大模型】RAG系统组件:检索器(LangChain)
  • 深度学习-LeNet5-AlexNet
  • ZeroNews 版本升级预告!
  • 【PMP备考】敏捷专题 - 敏捷概述
  • CPU 与存储器连接方式的深入理解
  • Java使用Langchai4j接入AI大模型的简单使用(三)--输入文字生成图片
  • C++结构体数组应用
  • 我自建服务器部署了 Next.js 全栈项目
  • hot100 hot75 栈、队列题目思路
  • os.machine()详解
  • 开阳630HV100芯片的外设配置
  • 如何重置被入侵服务器的Root密码?并且提高服务器安全?
  • 《当技术遇见毁灭:rm -rf的哲学隐喻与现实警示》