## 类与对象 ##

一、“类” 的介绍

1、 在C++中, 用 “类” 来描述 “对象”, 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。“都有质量”、“两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于该对象具有的行为, 也称方法。
2、类是属于用户自定义的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中说描述的方法。通常来说, 一个类的定义包含两部分的内容, 一是该类的属性, 另一部分是它所拥有的方法。以 “人类” 这个类来说, 每个人都有自己的姓名、年龄、出生日期、体重等, 为 人类 的属性部分, 此外, 人能够吃饭、睡觉、行走、说话等属于人类所具有的行为。
上面举例中所描述的 “人” 类仅仅是具有人这种对象的最基础的一些属性和行为, 可以称之为人的"基类”。 再说说一些具有一些职业的人, 例如学生, 一个学生还具有"基类"中所没有的属性, 如学校、班级、学号; 也可以具有基类所不具有的行为, 如每天需要去上课, 需要考试等。
3、 学生类可以看做是基类的一个扩展, 因为他具有基类的所有属性和行为, 并且在此基础上增加了一些基类所没有的属性和行为, 像"学生"这样的类称为"人类"这个基类的"派生类"或者"子类"。在学生的基础上海可以进一步的扩展出其他更高级的类, 如"研究生"类。

二、C++类的定义

C++中使用关键字 class 来定义类, 其基本形式如下:

class 类名
{                               //边界
    public:                     //公共的行为或属性
           外部接口             //行为,代码成员
Protected:
       保护型成员           
private:                   //公共的行为或属性
       私有成员             //属性,数据成员
};                            //边界

说明:
(1). 类名 需要遵循一般的命名规则;
(2). public 与 private 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。
一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口, 但这并非是强制规定, 可以根据需要进行调整;
(3). 结束部分的分号不能省略。

三、C++类的实现

上面的定义示例中我们只是定义了这个类的一些属性和方法声明, 并没有去实现它, 类的实现就是完成其方法的过程 。
类的实现有两种方式, 一种是在类定义时完成对成员函数的定义, 另一种是在类定义的外部进行完成。
1>. 在类定义时定义成员函数
成员函数的实现可以在类定义时同时完成, 如代码:

#include <iostream>
using namespace std;
class Point
{
    public:
        void setPoint(int x, int y) //实现setPoint函数
        {
            xPos = x;
            yPos = y;
        }
        void printPoint()       //实现printPoint函数
       {
            cout<< "x = " << xPos << endl;
           cout<< "y = " << yPos << endl;
        }
    private:
        int xPos;
        int yPos;
};
 
int main()
{
    Point M;        //用定义好的类创建一个对象 点M
    M.setPoint(10, 20); //设置 M点 的x,y值
    M.printPoint();     //输出 M点 的信息
    return 0;
}

运行结果为:
x = 10
y = 20
与类的定义相比, 在类内实现成员函数不再是在类内进行声明, 而是直接将函数进行定义, 在类中定义成员函数时, 编译器默认会争取将其定义为inline型函数。
2>. 在类外定义成员函数
在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 :: 进行实现, 形式如下:

返回类型 类名::成员函数名(参数列表)
{
             //函数体
}

#include <iostream>
using namespace std;
class Point
{
    public:
        void setPoint(int x, int y); //在类内对成员函数进行声明
        void printPoint();
 
    private:
        int xPos;
        int yPos;
};
void Point::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint数
{
    xPos = x;
    yPos = y;
}
void Point::printPoint()       //实现printPoint函数
{
    cout<< "x = " << xPos << endl;
    cout<< "y = " << yPos << endl;
}
int main()
{
    Point M;        //用定义好的类创建一个对象 点M
    M.setPoint(10, 20); //设置 M点 的x,y值
    M.printPoint();     //输出 M点 的信息
 
    return 0;
}

setPoint 成员函数来说, 在类内声明的形式为:

void setPoint(int x, int y); 

那么在类外对其定义时函数头就应该是:

void Point::setPoint(int x, int y) 

这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。

3>. 构造函数和析构函数
(1)构造函数:创建类对象,并初始化其值.
1. 传参
2. 按照类中成员变量声明顺序,依次构造其成员.
3. 执行构造函数函数体.
**作用:**在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。
构造函数有两种重载形式:有参数的和无参数的(默认构造函数);
拷贝构造函数:当用一个已存在对象去初始化一个新对象时,会调用拷贝构造函数.
(2)析构函数:释放(销毁)类对象.
1. 执行析构函数函数体
2. 按照类中成员变量声明顺序的逆序,依次析构其成员.
(3)初始化列表:初始化对象成员(调用成员对象的带参构造).
形式:在构造函数函数首部之后,函数体之前。启书写顺序不影响构造函数执行顺序。
(4)C++中class和struct的区别:.
class中的成员默认是private的;
struct中的成员默认是public的

四、对象的作用域、可见域与生存周期

类对象的作用域、可见域以及生存周期与普通变量的保持相同, 当对象生存周期结束时对象被自动撤销, 所占用的内存被回收,需要注意的是, 如果对象的成员函数中有使用 new 或者 malloc 申请的动态内存程序不会对其进行释放, 需要我们手动进行清理, 否则会造成内存泄露。
局部对象:函数结束销毁。
全局对象和静态局部对象:整个程序结束时销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值