【C++】第10章 对象和类 知识点总结

《C++ Primer Plus》第10章知识点总结

类规范由两个部分组成

类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口

类方法定义:描述如何实现类成员函数


接口

接口是一个共享框架,供两个系统(如计算机和打印机之间)交互时使用


封装

将类的实现细节放在一起并将它们与抽象分开被称为封装。数据隐藏(将数据放在类的私有部分)是一种封装,将实现的细节隐藏在私有部分也是封装。封装的另一个例子是,将类函数定义和类声明放在不同的文件中。


默认访问控制

类声明中可以不必使用关键字private,因为这是类对象的默认访问控制

结构的默认访问类型时public


实现类成员函数

定义成员函数时,使用作用域解析运算符(::)来标识函数所属的类

类方法可以访问类的private组件


内联方法

定义位于类声明中的函数都将自动称为内联函数

如果愿意,也可以在类声明之外定义成员函数,并使其称为内联函数,只需在类实现部分中定义函数时使用inline限定符即可。如:

class Stock{}

inline void Stock::set_tot(){...}


类的构造函数和析构函数

类构造函数

专门用于构造对象、将值赋给它们的数据成员

构造函数的参数名与类成员不能相同,否则最终代码将会造成混乱。一种常见的做法是在数据成员名中使用m_前缀或_后缀


使用构造函数

    //显示地调用构造函数
    Stock food=Stock("World Cabbage",250,1.25);
    //隐式地调用构造函数
    Stock garment("Furry Mason",50,2.5);
但无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。因此构造函数被用来创建对象,而不能通过对象来调用。


默认构造函数

这是在未提供显式初始值时,用来创建对象的构造函数

需要注意的是,当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。为类定义了构造函数后,程序员就必须为它提供默认构造函数。

默认构造函数没有任何参数,因此如果创建对象时没有进行显式地初始化,则将调用默认构造函数。如果程序中没有提供任何构造函数,则编译器会为程序定义一个默认构造函数;否则,必须自己提供默认构造函数。默认构造函数可以没有任何参数;如果有,则必须给所有参数都提供默认值


定义默认构造函数的方法有两种

(1)给已有构造函数的所有参数提供默认值。当用这种时,只需在声明处写了就可以,不用在定义中再具体写

Stock(const string& co="Error",int n=0,double pr=0.0);

(2)通过函数重载来定义另一个构造函数——一个没有参数的构造函数

Stock();

由于只能由一个默认构造函数,因此不要同时采用这两种方式

析构函数

对象过期时,程序将自动调用一个特殊的成员函数——析构函数,完成清理工作

和构造函数一样,析构函数的名称很特殊:在类名前加上~

析构函数没有任何参数,因此Stock析构函数必须是这样的:~Stock();

由于Stock的析构函数可以不承担任何重要的工作,因此可以将它编写为不执行任何操作的函数


析构函数的调用

(1)如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用

(2)如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时(该对象是在其中定义的)自动被调用

(3)如果对象是通过new创建的,则它将驻留在栈内存或自由存储区中,当使用delete来释放内存时,其析构函数将自动调用

(4)程序可以创建临时对象来完成特定的操作,在这种情况下,程序将在结束对该对象的使用时自动调用其析构函数


const成员函数

将const关键字放在函数的括号后面,表示保证函数不会修改调用对象,例:

void show() const;


this指针

this指针指向用来调用成员函数的对象

如果方法需要引用整个调用对象,则可以使用表达式*this


对象数组

const int STKS=4;
    Stock stock[STKS]=
    {
        Stock("Nanno",12.5,20),
        Stock("Boffo",200,2.0),
        Stock(),
        Stock("Fleep",60,6.5)
    };
初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。因此,要创建类对象数组,则这个类必须有默认构造函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值