【C++入门】(十一)高级类

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. 类声明、类实现中都可以将成员函数声明成内联的 

posted @   哟吼--小文文公主  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示