C++类定义与实现

C++类定义与实现

一、类的介绍

类是用户自定义的类型,并且该类型具有一定的行为能力(类中说的描述方法)。通常来说,一个类中包含两部分的内容,一是该类的属性,另一部分是它所拥有的方法。比如说“人”这个类,具有姓名,性别,年龄等属性;此外,人能够吃饭,睡觉,行走等行为称为方法。

1.类的声明:即类的成员函数声明,以成员函数的方式被称为公有接口

接口:一个共享的框架,主要由我们写的方法提供

二、类的定义

class是C++中新增的关键字,专门用于定义类。

class 类名
{
    public:
    //公共的行为或属性

    protected:
    //保护的行为或属性
 
    private:
    //私有的行为或属性
};

在类内部定义函数体

class 类名

{

返回类型 函数名(形参列表){

          函数体

         }

};

在类外部定义函数体

class 类名{

      返回类型  函数名(形参列表);

};

返回类型  类名::函数名(形参列表){

    函数体

};

这两种定义方法看起来没什么区别,其实它们还是有区别的,类内部定义的函数,程序在要调用它的时候会把它当成一个内联函数,内联函数调用速度更快。但是会占用额外的内存空间,每调用一次相当于定义一次。而外部定义的函数,不会被当做内联函数,类似与递归函数等,定义为内联函数肯定不合理的。所以建议用外部定义函数体。

类的定义一般放在程序文件开头,或者放到头文件中被程序文件包含。也可以放在局部作用域中。在C++规定中,在局部作用域中声明类,成员函数必须是函数定义形式,不能原型声明。

类相当于一种新数据类型,数据类型不占用存储空间,用类定义实体时候,才会为它分配空间。

说明:

①类名 需要遵循一般的命名规则;

②类定义结束的分号不能省略;

③public、protected和private为属性、方法限制的关键字,private表示该部分内容是simi私密,不能被外部所访问或调用,只能被类内部方法进行访问,protected表示受保护成员,可以被继承,并被派生类对象进行访问。不能被(类外)访问;public表示公开的属性和方法,外界可以直接访问或者直接调用。

类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。

class People{
    private:
        char *name;
        int age;
        char *sex;
    public:
        void Print(){
             cout<<"姓名"<<name<<"性别"<<sex<<"年龄"<<age;
    }
};

三、类的实现

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

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) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。、


我们之前说过,定义类型时不会分配存储空间,当定义一个对象的时候,将为其分配存储空间。

当然,有时候人们也希望可以动态的为其分配内存,当不用的时候再销毁它,就有了如下定义方式:

Point *p;

p=new Point;

当不再使用此动态对象的时候,必须用delete:

delete p;

访问对象中的成员有三种方法:

通过对象名和对象成员引用运算符 (.) 

通过指向对象的指针和指针成员引用运算符 (->)

通过对象的引用变量和对象成员引用运算符 (.) 

Point P;
P.printPoint();

Point *p;
p=new Point;
p->printPoint();

Point p;
&P=p;
P.printPoint();

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值