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

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) { } // 不可以!出现 二义性!因为上面的有默认参数,编译器调用构造函数时候会不知道调哪个
}
发布了17 篇原创文章 · 获赞 2 · 访问量 7530

猜你喜欢

转载自blog.csdn.net/youshiwukong1524/article/details/105346699
今日推荐