C++面向对象高级编程(侯捷)—— 3.内联函数、构造函数

本文探讨了C++中的内联函数,强调其作为优化手段的特性,但指出编译器会根据复杂性决定是否实际内联。内联函数应在头文件中定义,并适合简单的函数体。接着介绍了访问级别,包括public、private和protected,以及它们在继承中的作用。文章还讨论了构造函数,包括其无返回值、高效的初始化语法以及在private中的使用情况,如Singleton模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

inline 内联函数

  • 定义:函数若在class body内定义完成,便自动成为inline候选人,像宏(Macro)一样,有特性,无缺点。
  • 特性:
    • 如果称为函数成为内联函数,运行比较快;
    • 编译器决定最后是不是inline,太复杂则拒绝inline
    • inline这是对编译器的建议,编译器是否采纳未知
    • 为了解决频繁调用的小函数大量消耗栈空间(栈内存)的问题
    • 并不一定要在class中使用inline函数
    • 建议在头文件中定义 (因为内联函数要在调用点展开,所以编译器必须随处可见内联函数的定义)
  • 使用限制:
    • 只适合函数体很简单的情况
    • 不适合while、for、switch、递归的情况
// 头文件
class A
{
    public:
    void Foo(int x, int y);
}
 
 
// 定义文件
inline void A::Foo(int x, int y){}

access level 访问级别

  • 说明
    • 一个类可以有多个 public、protected 或 private 标记区域
    • 每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的
    • 成员和类的默认访问级别是 private
    • 继承特性
  • public:类外可访问
  • private:类外不可访问
  • protected:子类可访问

constructor 构造函数

{
    complex c1(2,1);    // 调用的上面的构造函数,自己指定值
    complex c2;         // 调用上面的构造函数,但是用默认值
    complex* p = new complex(4);
    ...
}
  • 不要返回值
  • 构造函数特有的初始化语法(冒号 : )效率高
  • 不带指针的类多半不需要写析构函数
  • 构造函数在private中:说明不允许被外界创建对象
    • Singleton设计模式:只能创建一个该类的对象

ctor overloading 构造函数重载

class complex
{
public:
    complex (double r = 0, double i = 0)
        : re (r), im (i)
    { }
    complex () : re(0), im(0) { } // 不可以!出现 二义性!因为上面的有默认参数,编译器调用构造函数时候会不知道调哪个
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值