【C++入门】(二)高级类

时间:2022-09-23
本文章向大家介绍【C++入门】(二)高级类,主要内容包括1. 常量成员函数是什么?、2. 如何将类接口与实现分开?、2.1 接口与实现、2.2 组织类声明和函数定义、3. 如何管理类?、3.1 内联实现的两种方法、4. 如何找出并避免bug?、5. 补充、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. 常量成员函数是什么?

使用 const 将成员函数声明为 常量函数 ,则表明它不会修改任何类成员的值

int getSpeed() const;
​
//getSpeed()可以为常量函数,它只是返回成员变量 speed 的当前值
int Tricycle::getSpeed() const   
{
    return speed;
}
​
//如果将函数声明为常量函数,但该函数实现了修改成员的功能,编译器就会报错

2. 如何将类接口与实现分开?

2.1 接口与实现

创建和使用对象的其他程序部分看做类的客户,类声明相当于和这些客户签订的合约,它告诉客户,类有哪些数据可用,能做什么

//在 Tricycle 类的声明中,向客户爸爸们承诺:
//1.每个 Tricycle 对象都能获取其速度(int getSpeed() const;)
//2.可以在创建对象的初始速度时设置它(void setSpeed(int speed);)
//3.且都能使用加速和刹车(void pedal();)(void brake();)
class Tricycle     
{
  public:
    int getSpeed() const;   //常量函数,承诺该函数打死不会修改 Tricycle 对象
    void setSpeed(int speed);  
    void pedal();
    void brake();
​
  private:
    int speed;
};
 

2.2 组织类声明和函数定义

C++源代码中,类的定义和实现通常是分开的

//如果将 Tricycle 类的声明放在"Tricycle.hpp"文件中,那么类函数的定义将位于文件 "Tricycle.cpp"中
//"Tricycle.cpp"文件中需包含头文件:
​
#include "Tricycle.hpp"

 

"Tricycle.hpp"文件

#include <iostream>class Tricycle
{
public:
    Tricycle(int initialSpeed);
    ~Tricycle();
    int getSpeed() const { return speed; }
    void setSpeed(int speed);
    void pedal()
    {
        setSpeed(speed + 1);
        std::cout << "\nPedaling " << getSpeed() << " mph\n";
    }
    void brake()
    { 
        setSpeed(speed - 1);
        std::cout << "\nPedaling " << getSpeed() << " mph\n";
    }
private:
    int speed;
};


"Tricycle.cpp"文件(main函数)

#include "Tricycle.hpp" 
 
// constructor for the object
Tricycle::Tricycle(int initialSpeed)
{
    setSpeed(initialSpeed);
}
 
// destructor for the object
Tricycle::~Tricycle()
{
    // do nothing
}
​
// set the trike's speed
void Tricycle::setSpeed(int newSpeed)
{
    if (newSpeed >= 0)
    {
        speed = newSpeed;
    }
}
   
// create a trike and ride it
int main()
{
    Tricycle wichita(5);
    wichita.pedal();
    wichita.pedal();
    wichita.brake();
    wichita.brake();
    wichita.brake();
    return 0;
}


3. 如何管理类?

3.1 内联实现的两种方法

//1.使用inline关键字,将成员函数声明成内联的
​
inline int Tricycle::getSpeed() 
{
    return speed;
}
//2.将函数定义放在类声明中,该函数将自动变成内联的
class Tricycle     
{
  public:
    int getSpeed() { return speed; }    //{ }后无分号
    void setSpeed(int speed);  
}; 

tips:

① 内联函数和普通函数相比,可以加快程序的运行的速度,因为在调用内联函数时,不需要中断寻址,编译时直接将内联函数镶嵌到目标代码中。

② 内联是以增加空间消耗为代价,换取时间开销。

③ 下列情况使用内联: 该函数仅仅几行,且不含有for,while,switch语句;

​ 该函数不断被重复调用;

④ 内联函数比宏安全,宏要考虑边际效应。

4. 如何找出并避免bug?

  1. 如果将程序设计成一系列彼此交互的类,可以提高效率

  2. 通过开发类,提高代码的可重用性

  3. 类还让代码更可靠。在类中,封装了完成任务所需的数据(将程序视为一组对象,其中每个对象都执行特定任务,可分散编程工作,同时确保它们组织有序)出问题时,更容易缩小范围到相关的类。

5. 补充

  1. C++头文件通常使用扩展名 .hpp (或不怎么常见的 .h );C++程序使用的文件拓展名为 .cpp

  2. 类声明、类实现中都可以将成员函数声明成内联的 

原文地址:https://www.cnblogs.com/ZWJ-zwj/p/16721803.html