当前位置:   article > 正文

C++类定义与实现_c++类的声明和实现

c++类的声明和实现

C++类定义与实现

一、类的介绍

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

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

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

二、类的定义

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

  1. class 类名
  2. {
  3. public:
  4. //公共的行为或属性
  5. protected
  6. //保护的行为或属性
  7. private:
  8. //私有的行为或属性
  9. };

在类内部定义函数体

class 类名

{

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

          函数体

         }

};

在类外部定义函数体

class 类名{

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

};

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

    函数体

};

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

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

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

说明:

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

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

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

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

  1. class People{
  2. private:
  3. char *name;
  4. int age;
  5. char *sex;
  6. public:
  7. void Print(){
  8. cout<<"姓名"<<name<<"性别"<<sex<<"年龄"<<age;
  9. }
  10. };

三、类的实现

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

1.类定义是定义成员函数

  1. #include <iostream>
  2. using namespace std;
  3. class Point{
  4. public:
  5. void setPoint(int x,int y) //实现setPoint函数
  6. {
  7. xPos=x;
  8. yPos=y;
  9. }
  10. void printPoint(){ //实现printPoint函数
  11. cout<<"x="<<xPos<<endl;
  12. cout<<"y="<<yPos<<endl;
  13. }
  14. private:
  15. int xPos;
  16. int yPos;
  17. }
  18. int main(){
  19. Point M; //用定义好的类创建一个对象 点M
  20. M.setPoint(10,20); //设置M点的x,y值
  21. M.printPoint(); //输出M点的信息
  22. return 0;
  23. }

x=10

y=20

与类的定义相比,在类内实现成员函数不再是在类内进行声明,而是直接将函数直接定义,在类中定义成员函数时,编译器默认将其定义为inline函数

2.在类外定义成员函数

在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 :: 进行实现

  1. 返回类型 类名::成员函数名(参数列表)
  2. {
  3. //函数体
  4. }
  5. #include <iostream>
  6. using namespace std;
  7. class Point
  8. {
  9. public:
  10. void setPoint(int x, int y); //在类内对成员函数进行声明
  11. void printPoint();
  12. private:
  13. int xPos;
  14. int yPos;
  15. };
  16. void Point::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint函数
  17. {
  18. xPos = x;
  19. yPos = y;
  20. }
  21. void Point::printPoint() //实现printPoint函数
  22. {
  23. cout<< "x = " << xPos << endl;
  24. cout<< "y = " << yPos << endl;
  25. }
  26. int main()
  27. {
  28. Point M; //用定义好的类创建一个对象 点M
  29. M.setPoint(10, 20); //设置 M点 的x,y值
  30. M.printPoint(); //输出 M点 的信息
  31. return 0;
  32. }

setPoint 成员函数来说, 在类内声明的形式为 void setPoint(int x, int y); 那么在类外对其定义时函数头就应该是 void Point::setPoint(int x, int y) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。、


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

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

Point *p;

p=new Point;

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

delete p;

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

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

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

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

  1. Point P;
  2. P.printPoint();
  3. Point *p;
  4. p=new Point;
  5. p->printPoint();
  6. Point p;
  7. &P=p;
  8. P.printPoint();

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43791
推荐阅读
相关标签
  

闽ICP备14008679号