设为首页 收藏本站
查看: 6|回复: 0

[经验分享] C++之类和对象基础

[复制链接]
累计签到:53 天
连续签到:2 天
发表于 2025-5-29 11:32:58 | 显示全部楼层 |阅读模式
在 C++ 的世界里,类和对象构成了面向对象编程(Object-Oriented Programming,OOP)的核心框架,如同搭建高楼大厦的基石,支撑起复杂且灵活的程序结构。无论是开发游戏、设计大型软件系统,还是进行底层驱动开发,类和对象的合理运用都能让代码更具逻辑性、可维护性和扩展性。

一.类的定义
类是一种用户自定义的数据类型,它将数据(成员变量)和操作这些数据的函数(成员函数)封装在一起,就像一张设计蓝图,定义了某一类事物的属性和行为。

1. 类的定义格式
C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接提供给外部的⽤⼾使⽤。

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。

[C++] 纯文本查看 复制代码
class 类名 {

    private:

        // 私有成员变量和函数,只能在类内部访问

        数据类型 成员变量名;

        返回类型 私有成员函数(参数列表);

    public:

        // 公有成员变量和函数,可以在类外部访问

        数据类型 成员变量名;

        返回类型 公有成员函数(参数列表);

    protected:

        // 保护成员变量和函数,可在类及其派生类中访问

        数据类型 成员变量名;

        返回类型 保护成员函数(参数列表);

};


private、public和protected是访问控制修饰符,用于限定成员的访问权限。

public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的,以后继承章节才能体现出他们的区别。

访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有访问限定符,作⽤域就到}即类结束。

class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。
在类里定义的函数默认为inline格式,若在类外定义时,也可以通过认为加inline来实现内联

2.类域
类域,简单来说就是类所定义的范围,类中的成员变量和成员函数都处于这个特定的范围之内。在类域中定义的名字(成员变量名、成员函数名等),其作用范围仅限于该类,与类外部的同名标识符相互独立。
比如,在一个Student类中定义了name成员变量,而在类外部的其他地方也定义了name变量,这两个name分别属于不同的作用域,不会产生冲突。
在访问类域中的成员时,需要遵循一定的规则。如果在类的成员函数内部访问类的成员变量,无需特殊的前缀,直接使用变量名即可,因为成员函数本身就处于类域之中,编译器能够明确识别这是类内的成员。例如:

[C#] 纯文本查看 复制代码
class Student {

private:

    string name;

    int age;

public:

    void setInfo(string n, int a) {

        name = n;  // 直接访问类域内的成员变量name

        age = a;

    }

};



但在类外部访问类的成员时,就需要通过对象或对象指针,并结合点运算符.或箭头运算符->来明确指定访问类域中的成员。像这样:

[C++] 纯文本查看 复制代码
int main() {

    Student stu;

    stu.setInfo("Tom", 20);

    return 0;

}


类域的存在,一方面实现了数据和操作的封装,将相关的成员变量和函数聚集在一起,增强了代码的内聚性;另一方面,通过限制成员的作用范围,避免了命名冲突,提高了代码的可读性和可维护性。同时,在继承关系中,类域的规则也会影响派生类对基类成员的访问和覆盖,这进一步体现了类域在构建复杂类体系时的重要作用。

二.实例化
1.对象
对象是类的具体实例,就像依据设计蓝图建造出的实际建筑。每个对象都有自己独立的存储空间,存储着类中定义的成员变量的值,并且可以调用类中定义的成员函数。

⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。

类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。

⼀个类可以实例化出多个对象,实例化出的对象占⽤实际的物理空间,存储类成员变量。

2.对象的大小
在计算对象的大小时,内存分配规则基本与C语言结构体一致。
具体可以看此篇博客 : 结构体内存。
但类的内存分配有几个特例:

类函数所占的内存,是不计算在类的内存大小当中的。由于每次调用类函数时,所调用的是同一个函数,因此没有比要在每次实例化的过程中为函数分配一块内存,而是分配在了栈区。
当类为空时,为表示类的存在,所以会默认给1字节大小的空间。

三.this指针
在 C++ 类的成员函数中,this指针是一个隐含的指针变量,它指向调用该成员函数的对象。this指针在类和对象的交互中起着至关重要的作用,帮助成员函数准确地访问和操作所属对象的成员变量。
编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。

this 指针的作用​
当多个对象调用同一个成员函数时,this指针使得函数能够区分到底是哪个对象在调用它。
this 指针的使用场景
除了在成员函数中访问成员变量,this指针还常用于函数返回对象自身、解决参数与成员变量同名问题等场景。
类的成员函数中访问成员变量,本质都是通过this指针访问的。只不过在这里可以隐式使用,编译器会自动处理。
this指针不能够出现在形参与实参的位置,但是可以在函数体内显⽰使⽤this指针。他只能够在类里使用



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1005725-1-1.html 上篇帖子: C++的多态 下篇帖子: C++ :try 语句块和异常处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表