认识类和对象

本文介绍了C语言的面向过程编程与C++的面向对象编程的区别,以“洗衣服”的例子说明。在C++中,类是核心概念,包括访问限定符(public,protected,private)和封装机制。类的实例化创建对象,this指针在成员函数中用于指向调用对象。此外,讨论了类的作用域和对象模型,以及空类的大小。
摘要由CSDN通过智能技术生成

1.面向过程和面向对象初步认识

        C语言是面向过程的,C++是面向对象的。举例来说,同样是完成“洗衣服”这件事,C语言是将其分为很多个步骤:拿盆→放水→放衣服→放洗衣粉→……→拧干→晾衣服。而C++关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。人只需要将衣服和洗衣粉放进洗衣机,就可以了。

 2.类的引入

        struct:在C语言中,struct只能定义结构体变量,但在C++中,struct可以定义变量,也可以定义函数,而在C++中,我们更喜欢用class来定义结构体。

3.类的定义

class ClassName
{
    //类体:由成员变量和成员函数组成

    //类中的变量称为类的属性或成员变量
    //类中的函数称为类的方法或成员函数

};//此处有分号

calss为定义类的关键字,ClassName是类的名字,{}中为类的主体。

4.类的访问限定符及封装

        C++实现封装的方式: 用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其 接口提供给外部的用户使用

限定符说明:

        1. public修饰的成员在类外可以直接被访问

        2. protected和private修饰的成员在类外不能直接被访问(此处protectedprivate是类似的)

        3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

        4. 如果后面没有访问限定符,作用域就到 } 即类结束。
        5. class的默认访问权限为 private struct public( 因为 struct 要兼容C)
        封装: 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。本质上是一种管理,让用户更方便使用类。
        比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

5.类的作用域

        在类外定义成员时,要使用::作用域操作符指明成员属于哪个类。

class Person
{
public:
    void PrintPersonInfo();//在类里面声明
private:
    char _name[20];
    char _gender[3];
    int _age;
};


//这里需要指定PrintPersonInfo是属于Person这个类域
//在类外定义成员函数

void Person::PrintPersonInfo()
{
    cout << _name << " "<< _gender << " " << _age << endl;
}

6.类的实例化

        上面那段代码,Person类是不占空间的,只有Person实例化出的对象才有具体的信息。

int main()
{
    Person._age = 100; // 编译失败:error C2059: 语法错误:“.”
    return 0;
}

7.类对象模型

        如何计算类对象的大小呢?一个类的大小,实际就是该类中成员变量”之和,当然要注意内存对齐。规则同结构体大小计算。值得注意的是空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。

        

8.this指针

        this指针本质是个形参,存在栈里。

        vs对this指针的传递进行了优化,对象地址是放在ecx中。ecx存储this指针的值。

this指针说明:

1. this 指针的类型:类类型 * const ,即成员函数中,不能给 this 指针赋值。
2. 只能在 成员函数 的内部使用
3. this 指针本质上是 成员函数 的形参 ,当对象调用成员函数时,将对象地址作为实参传递给 this 形参。
所以 对象中不存储 this 指针
4. this 指针是 成员函数 第一个隐含的指针形参,一般情况由编译器通过 ecx 寄存器自动传递,不需要用
户传递

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值