类与对象(一)

本文介绍了C++中类与对象的概念,包括类的定义、访问限定符、封装原则以及类的实例化过程。重点讲解了类的属性(成员变量)和行为(成员函数)以及如何通过封装提高代码安全性与复用性。
摘要由CSDN通过智能技术生成

      相交于C语言面向过程,关注的是过程来说,C++面向的是对象,更加关注对象,本文将初步对类与对象进行简单介绍。

一、类与对象的定义

(一)什么是类与对象

        类是一种抽象的感念,具有相同特性(成员变量,即类的属性)行为(成员函数,即类的方法)的对象的抽象就是类。类以数据为中心,把相关的一批函数组成为一个整体。

        对象是一种具体的概念,对象是人们要进行研究的任何事物,如果把类看做一个是数据类型,那么对象就是乡相应类型的变量。

        类的实例化就是对象,对象的抽象就是类,如果把人比作一个类,那么具体到哪一个人则是一个对象,所有的对象都符合这个类的标准,他们具有相同的属性(都是人),但是具有不同的属性值(姓名、年龄、性别等等)。

(二)定义

        定义如下:

class classname
{
    //类体;
};

        class为关键字,类体由成员变量和成员函数组成,classname为自定义类名称。

        类的两种定义方式:

        1、声明和定义都放在类体中,编译器可能会将其当做内联函数除处理(在日常练习中常采用此种定义方式)

class person
{
public:
    void ShowInformation()
    {       
        cout << _name << "_" << _sex << "_" << _age << endl;
    }
private:
    char* _name;
    char* _sex;
    int _age;
} ;

        2、声明在.h文件中,定义在.cpp文件中(常在工程中使用)

以下是在.h文件中进行声明

class person
{
public:
    void ShowInformation()
private:
    char* _name;
    char* _sex;
    int _age;
} ;

以下是在.cpp文件中对声明的成员函数进行定义

#include "person.h"
    void person::ShowInformation()
    {       
        cout << _name << "_" << _sex << "_" << _age << endl;
    }

二、类的访问限定符及封装

             由上面对类的定义,引出了访问限定符及封装的概念。

(一)访问限定符

        1、public(共有):修饰的成员在类外可以被访问

        2、protected(保护)和private(私有):修饰的成员在类外不可以被直接访问。(此处的protected与private是类似的)。

        3、作用域:从该访问限定符出现开始到下一个访问限定符出现为止。

        在C++中struct可以定义结构体也可以定义类,当他定义类时,与class的区别在于,class默认访问限定符为private,而struct默认访问限定符为public(因为要兼容C)。

(二)封装

面向对象的三大特征:封装、继承和多态。

        1、什么是封装?

        封装实际是将数据与操作数据的方法进行有机结合,隐藏对象的部分属性和细节,对外只公开接口,通过接口来对数据进行操作。

        2、为什么要进行封装?

        数据隐藏:封装本质上时一种管理,封装可以使数据变的更加安全,只允许类的共有成员函数来访问和操作数据。这样可以避免数据被外部直接访问和修改,提高了数据的安全性。

        代码复用:封装将数据和相关操作封装在一个类中,可以提高代码的复用性,减少了重复编写代码的工作量。

        简化接口:封装可以隐藏类的实现细节,只暴露给外部必要的接口,降低了外部使用者对类的复杂性和理解成本。

        3、C++如何实现封装?

        用类将对象的属性(成员变量)与方法(成员函数)结合在一起,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

三、类的实例化

        类的实例化如下所示:

//定义一个学生类
class Stu
{
//公有成员函数
public:
    void func()
    {
        ;
    }

//私有成员变量
private:
    char* _name;
    char* _sex;
    int _age;
};

int main()
{
    Stu s1;//s1就是定义的学生类Stu实例化出来的对象
    cout << sizeof(s1) ;
    return 0;
}

        根据以上可知,s1就是我们定义的学生类Stu实例化出来的一个对象,那么这个对象s1的大小是多少个字节呢?以上定义的s1的大小为24个字节,类的大小遵循结构体的大小对齐规则。

        对于没有成员变量的类的大小为“1”,这个“1”不是为了存储数据而是占位表示它存在。

        空类:没有成员函数也没有成员变量,它的大小为1个字节。

        那么会存在一个疑问,为什么s1的大小为24个字节呢?

        因为对象只存储成员变量,不会存储成员函数。一个类实例化出来的N个对象,每个对象的成员变量都可以存储不同的值,但是调用的成员函数却是同一个,如果每个对象都存放成员函数,而这些成员函数却是一样的,会浪费空间。
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吐泡泡啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值