C++:程序的基本组成

一、头文件

头文件一般有两种形式:声明与标准库

C++ 标准库是 C++ 语言规范中定义的一个强大、丰富、可扩展的库集合。它不是一个单一的库,而是一个包含了容器、算法、函数对象、迭代器、字符串、输入/输出流、智能指针等众多组件的综合体。

声明则是将一个名称(变量名、函数名、类型名等)引入到程序的作用域中,并告知编译器该名称的存在及其类型信息。

#include<iostream>//标准库
#include"complex.h"//声明

二、类的声明

#ifndef COMPLEX  // 头文件保护,防止重复包含
#define COMPLEX  // 定义标识符

template<typename T>  // 模板声明,T 是类型参数
class complex {
private:
    T re, im;  // 私有成员变量,分别表示实部和虚部

    // 声明友元函数
    friend complex& __doapl(complex*, const ccomplex&);

public:
    // 构造函数,带有默认参数
    // 其中的: re( r ), im( i )为初始化列表
    complex(T r = 0, T i = 0) : re(r), im(i) {}

    // 复合赋值运算符重载
    complex& operator += (const complex&);

    // 获取实部和虚部的成员函数(const 成员函数)
    T real() const { return re; }
    T imag() const { return im; }
};

#endif  // 结束头文件保护
  • 函数调用
    将返回地址、寄存器状态等压入栈
    为函数内的局部变量分配栈空间
    传递参数
    跳转到函数代码的地址
    执行函数体
    将返回值存入指定位置
    弹出栈,恢复现场
    跳转回调用处

  • 内联函数(inline)
    内联函数是 C++ 中一项用于提升程序运行效率的特性。它的核心思想是:在编译时,将函数调用处直接用函数体中的代码进行替换,从而消除函数调用的开销。
    而且inline或者隐式内联(在类定义内部直接实现的成员函数)只是一个对编译器的建议,编译器有权决定是否真正进行内联。
    内联函数通常用于小而简单、被频繁调用的函数。

  • 构造函数
    这个构造函数使用了成员初始化列表,来初始化成员变量re和im。
    对于非内置类型,如果使用赋值方式在构造函数体内初始化,实际上会先调用默认构造函数,然后再进行赋值操作。而使用初始化列表则直接调用拷贝构造函数一次完成初始化,避免了额外的默认构造和赋值操作。

  • 常量成员函数(const)
    在一个成员函数的参数列表后加上 const 关键字,表示这个成员函数不会修改类的任何非静态成员变量。
    mutable 用来突破 const 的限制。被 mutable 修饰的成员变量,即使在 const 成员函数中,也可以被修改。

  • 参数传递
    在这里插入图片描述
    传递引用的好处:修改外部变量(替代指针)、避免复制开销(提高效率)
    如果我们只想避免复制开销,但又不想让函数修改原始数据,就需要使用 const 引用。
    指针可以随时改变其指向的对象,但是引用在初始化后就不能再改变其绑定的对象。所有对引用的操作都是在操作它最初绑定的那个对象。

  • 返回值(Return by Value)
    1.返回的是对象的副本
    2.安全,调用者拥有返回值的完全所有权
    3.可能产生复制开销(对于大型对象)
    4.适用于返回基本数据类型和小型对象

  • 返回指针
    1.返回的是内存地址,而不是数据本身
    2.避免了大型对象的复制开销
    3.调用者需要关注指针的有效性(可能为空)
    4.需要明确内存所有权(谁负责释放内存)

  • 返回引用
    1.返回的是对象的别名,而不是副本
    2.避免了复制开销
    3.调用者可以修改原始对象(除非是const引用)
    4.必须确保返回的引用指向的对象在函数返回后仍然存在

  • 友元函数
    友元函数是 C++ 中一个重要的特性,它允许非成员函数访问类的私有和保护成员。
    注意:友元函数不是类的成员函数,它只是在类中声明为"朋友",定义仍在类外部。
    友元函数的特性
    1.不是成员函数:定义时不使用类名和作用域解析运算符
    2.可以访问所有成员:包括 private 和 protected
    3.不受访问限定符影响:可以在类的任何部分声明(public、private、protected)
    4.没有 this 指针:因为是普通函数,不是成员函数
    注意:相同的class的各个objects互为友元。

  • 成员函数
    1.属于类:成员函数是类的一部分,必须通过类的对象(或指针/引用)调用
    2.访问权限:可以访问类的所有成员(包括私有和保护成员)
    3.隐含的this指针:每个成员函数都有一个隐含的this指针,指向调用该函数的对象
    4.作用域:在类的作用域内定义

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值