当前位置: 首页 > article >正文

侯捷 C++ 课程学习笔记:类的声明与构造函数

目录

一、类的声明

二、内联函数

三、访问级别

四、构造函数

五、构造函数重载

六、实际应用案例

七、学习心得


一、类的声明

类的声明是定义类的基本结构,包括类的成员变量和成员函数。类的声明分为类头和类体两部分。

  • 类头(class head):包含类的名称和访问级别。

  • 类体(class body):包含类的成员变量和成员函数的声明。

示例代码:

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) { }
    complex& operator += (const complex&);
    double real() const { return re; }
    double imag() const { return im; }
private:
    double re, im;
    friend complex& __doapl(complex*, const complex&);
};

在上述示例中:

  • publicprivate 是访问级别,分别表示公有成员和私有成员。

  • complex 是类的构造函数,用于初始化对象。

  • operator += 是重载的赋值运算符。

  • realimag 是成员函数,用于获取复数的实部和虚部。

  • reim 是私有成员变量,用于存储复数的实部和虚部。

  • __doapl 是友元函数,用于实现某些特定的操作。

二、内联函数

内联函数(inline function)是一种特殊的函数,其定义在类体内部。内联函数的定义在类体内部完成,编译器会将其定义为内联函数的候选人。

示例代码:

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) { }
    complex& operator += (const complex&);
    double real() const { return re; }
    double imag() const { return im; }
private:
    double re, im;
    friend complex& __doapl(complex*, const complex&);
};

在上述示例中,realimag 函数在类体内部定义,因此它们是内联函数的候选人。内联函数的定义在类体内部完成,可以提高函数的执行效率。

三、访问级别

访问级别(access level)决定了类的成员变量和成员函数的访问权限。C++ 中有三种访问级别:publicprotectedprivate

  • public:公有成员,可以在类的外部访问。

  • protected:保护成员,可以在类的内部访问,也可以在派生类中访问。

  • private:私有成员,只能在类的内部访问。

示例代码:

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) { }
    complex& operator += (const complex&);
    double real() const { return re; }
    double imag() const { return im; }
private:
    double re, im;
    friend complex& __doapl(complex*, const complex&);
};

在上述示例中:

  • public 成员函数 realimag 可以在类的外部访问。

  • private 成员变量 reim 只能在类的内部访问。

四、构造函数

构造函数(constructor)是类中用于初始化对象的特殊成员函数。构造函数的名称与类名相同,没有返回值,可以重载。

示例代码:

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) { }
    complex& operator += (const complex&);
    double real() const { return re; }
    double imag() const { return im; }
private:
    double re, im;
    friend complex& __doapl(complex*, const complex&);
};

在上述示例中,complex 是类的构造函数,用于初始化对象。构造函数可以有默认参数,如 double r = 0, double i = 0

五、构造函数重载

构造函数可以重载,即一个类可以有多个构造函数,只要它们的参数列表不同。

示例代码:

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) { }
    complex() : re(0), im(0) { }
    complex& operator += (const complex&);
    double real() const { return re; }
    double imag() const { return im; }
private:
    double re, im;
    friend complex& __doapl(complex*, const complex&);
};

在上述示例中,complex 类有两个构造函数:

  • 一个带有两个参数的构造函数,用于初始化复数的实部和虚部。

  • 一个无参数的构造函数,用于初始化复数的实部和虚部为0。

六、实际应用案例

我们在实际应用中,构造函数的合理使用可以显著提升代码的可读性和可维护性。例如,在创建复数对象时,可以使用构造函数初始化复数的实部和虚部。

示例代码:

complex c1(2, 1);  // 使用带参数的构造函数
complex c2;         // 使用无参数的构造函数
complex* p = new complex(4);  // 使用带参数的构造函数创建指针对象

通过这种方式,可以灵活地创建和初始化复数对象,同时保持代码的简洁性和可读性。

七、学习心得

通过学习侯捷老师的 C++ 课程,我对类的声明、内联函数、访问级别和构造函数有了更深入的理解。特别是对构造函数的重载和内联函数的使用,为后续的面向对象编程打下了坚实的基础。

在实际编程中,合理使用构造函数和内联函数可以显著提高代码的执行效率和可读性。同时,理解访问级别的作用,有助于更好地封装类的内部数据,保护类的成员变量和成员函数。


http://www.kler.cn/a/557927.html

相关文章:

  • el-dropdown选中效果
  • Linux 驱动入门(6)—— IRDA(红外遥控模块)驱动
  • SpringSecurity设置白名单
  • 06.Docker 镜像制作和管理
  • Orcale、MySQL中参数类型的详解和运用场景(不带示例)
  • 收到线上服务器出现cpu告警一般怎么排查?
  • 21.《SpringBoot 异步编程@Async与CompletableFuture》
  • Docker 与 CI/CD:自动化构建和部署
  • Linux中的查看命令
  • 【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
  • ThinkORM模型静态方法create好像对MongoDB不支持
  • always和assign语法区别
  • 深入学习 XML:语法、约束、解析及相关技术
  • Git 中 rebase, squash, amend 的作⽤
  • 【回溯算法2】
  • 酵母细胞壁市场报告:探索潜力无限的生物资源宝库
  • javaEE-14.spring MVC练习
  • Python 高级数据结构操作全解析:从理论到实践
  • 智能硬件-01智能停车场
  • 案例-14.文件上传-简介