首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我创建自定义异常类时,如何使用提供的参数调用基构造器?

在创建自定义异常类时,通常需要继承自标准的异常类(如Exception),并可能需要使用提供的参数来调用基类的构造器。以下是一个基本的示例,展示了如何在自定义异常类中使用提供的参数调用基类的构造器:

代码语言:txt
复制
class CustomException(Exception):
    def __init__(self, message, error_code):
        # 调用基类的构造器
        super().__init__(message)
        self.error_code = error_code

# 使用自定义异常类
try:
    raise CustomException("这是一个错误信息", 404)
except CustomException as e:
    print(f"捕获到自定义异常: {e}, 错误码: {e.error_code}")

在这个例子中,CustomException类继承自Exception类,并且在其构造函数中接收两个参数:messageerror_code。通过调用super().__init__(message),我们调用了基类Exception的构造器,并传递了错误信息。这样,当捕获到这个自定义异常时,可以通过e访问到错误信息和错误码。

优势

  • 可读性:自定义异常类可以提供更具体的错误信息,使得代码更具可读性和可维护性。
  • 灵活性:可以根据需要添加额外的属性和方法,以提供更多的上下文信息或处理逻辑。
  • 错误处理:可以更精确地捕获和处理特定类型的异常,而不是仅仅捕获所有异常。

类型

自定义异常类可以根据具体需求分为多种类型,例如:

  • 业务异常:用于处理业务逻辑错误。
  • 系统异常:用于处理系统级别的错误。
  • 验证异常:用于处理输入验证失败的情况。

应用场景

  • API开发:在RESTful API中,可以使用自定义异常来返回特定的HTTP状态码和错误信息。
  • 数据库操作:在执行数据库操作时,如果遇到特定错误,可以抛出自定义异常以便更好地处理。
  • 文件处理:在文件读写操作中,如果遇到文件不存在或权限问题,可以抛出自定义异常。

常见问题及解决方法

  1. 参数传递错误:确保在调用基类构造器时传递正确的参数。
  2. 参数传递错误:确保在调用基类构造器时传递正确的参数。
  3. 属性未定义:如果在自定义异常类中添加了新的属性,确保在使用这些属性之前已经正确初始化。
  4. 属性未定义:如果在自定义异常类中添加了新的属性,确保在使用这些属性之前已经正确初始化。
  5. 异常捕获不准确:确保在捕获异常时使用正确的异常类型。
  6. 异常捕获不准确:确保在捕获异常时使用正确的异常类型。

通过以上方法,可以有效地创建和使用自定义异常类,并解决在开发过程中可能遇到的相关问题。

相关搜索:当派生类不能轻松地将参数传递给基类时,如何调用基类构造函数?当使用默认构造函数实例化继承的类时,它是否也调用基类构造函数?(C#)当您想创建继承类时,如何处理带有构造函数的基类?当使用非位置参数时,如何强制调用抽象类构造函数?c++在创建结构数组时,如何使用位于结构数组内的类的参数调用构造函数?如何创建一个与父类构造函数参数不同的自定义(ElevatedButton)类构造函数?如何使用Kotlin在Android中创建自定义视图的基类?在使用CRTP时,如何调用派生类的构造函数?ByteBuddy如何使用构造函数调用类中的另一个构造函数来创建类?当我尝试使用useParams从url获取参数时,类组件中的挂钩调用无效尝试使用类引用变量创建实例时,无法调用提供'module‘对象的Python如何使用XUnit依赖构造器注入创建我的具体类如何从使用类加载器创建的类中调用方法如何为构造函数中有参数的类使用反射来创建对象的实例?如何在使用INSERT语句时修复“SQLite异常,为命令提供的参数不足”当我们有两个具有相同属性的类时,如何在Java中为参数化构造函数创建对象?如何使用C#中的构造函数在不传递参数的情况下调用类当我们将一个整数值赋给一个类的对象时,为什么调用参数化的构造函数?如何在Scala中不使用早期初始化器为超类构造函数创建参数当类在angular中使用其他服务时,如何防止在typescript类的构造函数中传递参数?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《C++Primer》第十八章 用于大型程序的工具

如果某个局部对象的类型是类类型,则该对象的析构函数将被自动调用。与往常一样,编译器在销毁内置类型的对象时不需要做任何事情。...thrrow语句, 编译器将调用terminate throw; 很多时候catch语句会改变其参数的内容,如果在改变了参数的内容后catch语句重新抛出了异常,则只有当catch异常声明是引用类型时我们对参数所做的改变才会被保留并继续传播...与其他函数调用一样,如果在参数初始化的过程中发生了异常,则该异常属于调用表达式的一部分,并将在调用者所在的上下文中处理。 处理构造函数初始值异常的唯一方法是将构造函数写成函数try语句块。...假如在我们继承体系中,当创建一个Bear或者Raccoon的对象时,它就已经位于派生的最底层,因为Bear或Raccoon的构造函数将直接初始化器ZooAnimal基类部分: Bear::Bear(std...当我们创建一个Panda对象时,初始化顺序: 使用Panda的构造函数初始值列表中提供共的初始值构造虚基类ZooAnimal部分 接下来构造Bear部分 然后构造Raccoon部分 构造第三个直接基类

1.4K20

苏州同程旅游学长给我的全面的面试知识库

7、定义构造函数 构造函数是与该类具有相同名称的类中的成员函数。每当创建对象类时,都会自动调用构造函数。它在初始化类时构造数据成员的值。 8、什么是锯齿状阵列? 具有数组类型元素的数组称为锯齿数组。...当我们想限制继承的类时,我们创建密封的类。密封的修饰符,用于防止从类派生。如果我们强制将密封类指定为基类,则会发生编译时错误。 18、什么是方法重载?...方法重载是在同一个类中创建多个具有相同名称且具有唯一签名的方法。编译时,编译器使用重载解析来确定要调用的特定方法。 19、 Array和Arraylist有什么区别?...24、我们如何才能按降序对Array的元素进行排序? 使用Sort()方法,然后使用Reverse()方法。 25、写下C#语法以捕获异常 为了捕获异常,我们使用try-catch块。...当我们希望对象与它们一起释放任何非托管资源时,将调用Dispose()。另一方面,Finalize()用于相同的目的,但不能保证对象的垃圾回收。 28、什么是循环引用?

3K20
  • 《Effective C++》学习笔记

    条款12:复制对象时勿忘其每一个成分 复制构造函数和赋值构造函数要确保复制了对象内的所有成员变量和所有基类成分,这意味着你如果自定义以上构造函数,那么每增加成员变量,都要同步修改以上构造函数,且要调用基类的相应构造函数...此时再通过子类使用其基类中的重载函数(子类没有声明接收该参数的重载函数时),都会报错。...如果想要让类在构造时自动调用自定义的new_handler,并在构造结束后回到系统默认的new_handler 。...自定义的delete应该可在收到null指针时不做任何事,Class专属版本还应该处理衍生类的申请,不要直接调用基类的(大小不同),可以判断并转调普通的delete函数。...当创建对象时,会先进行new,然后调用构造函数,如果构造出现异常,就需要delete,否则内存泄漏。

    1.1K20

    【C++】42道面试经典问题总结

    分开原因:当我们去初始化一个容器时,底层应该是空的,只有内存,没有对象,但是如 果在容器构造时直接用new,不仅会开辟内存还会构造很多无用的对象 。...虚析构函数,把基类的析构函数实现成虚析构函数,则对析构函数的调用进行动态绑定,基类、派生类的析构函数就都可以调用到 构造函数和析构函数中能不能抛出异常?...构造函数不能抛出异常,如果可以抛出异常的话,假如对象创建失败,则就不会调用析构函数了,从而造成内存泄漏(可以进行代码分离,保证对象创建是成功的,析构函数也就可以正常执行) 析构函数也不能抛出异常,抛出异常后...虚函数的调用前提是对象存在, 一个派生类的构造要先调用基类构造函数,如果基类是虚构造函数则会无限循环 在构造函数中,是不会进行动态绑定的,虚构造函数本身也不能实现成虚函数。...C++生成函数符号,是依赖于函数名字+参数列表 当我们编译到函数调用点时,根据函数名字和传入的实参(类型,个数)和某一个函数重载匹配的话,就直接调用相应的函数重载版本(静态多态,都是在编译阶段处理的)

    12310

    【笔记】《C++Primer》—— 第三部分:类设计者的工具

    ,参数是左值使用拷贝,参数是右值或不可拷贝使用移动 为了达成易用性与性能间的平衡,当我们定义自己的函数时,可以对其重载一个constX&参数的左值引用形式和X&&的右值引用形式 引用限定符也可以用来区分重载...当我们需要显式调用递增递减运算符时,我们需要对后置版本的参数传递一个任意int值,这样编译器才能区分出版本 重载函数调用运算符让我们可以像使用函数一样使用类的对象,称为函数对象,函数对象常常用作泛型算法的实参...,写法和15.6中指明重载的基类函数一样,效果与定义一个空的构造函数然后列表中调用基类构造函数一致 和普通函数的using不同,对构造函数的using不会改变构造函数的访问级别 当基类构造函数中有默认实参时...,这些实参不会被继承,而是派生类会得到多个继承的构造函数,每个构造函数省略一个有默认实参的形参 当我们想要把继承体系的对象存放到容器中时,最好使用间接存储也就是存放基类指针(智能指针就更好了) 16...模板与泛型编程 OOP让我们可以在运行时处理运行前未知的动态情况,而泛型模板编程让我们可以在编译时就处理好一些动态的情况 当我们调用函数模板时,编译器和以前一样可以自动按照我们的实参来推断模板参数的类型

    1.7K10

    【笔记】《C++Primer》—— 第四部分:高级主题(完)

    当我们想要从一个分布和一个范围中生成随机数时,我们应该使用随机数分布器,常用的随机数分布器就是uniform_int_distribution均匀整数分布器和uniform_real_distribution...要注意的是基类的构造顺序是与派生列表中基类的出现顺序一致,与派生类参数顺序无关 多继承的时候,名称查找会在所有直接基类中同时进行,单个继承链上才有顺序,此时如果名字在多个基类中被同时找到,则名字会有二义性...当我们调用new时,实际上我们先调用了一个称为operator new的标准库函数分配了一块足够大的未命名的内存,然后将目标元素构造在这块内存中,完成后返回这块内存的头指针。...当我们调用new的时候,size_t参数是要分配的对象的字节数,当我们调用new[]时,参数则是数组所有元素的字节和。...自定义new时,void *operator new(size_t, void*);函数不能被重新定义,这是标准库专用的 没有使用定位new时,默认会调用void *operator new(size_t

    91310

    C++中空类:认识它的6个默认函数和6个构造函数

    继承:空类可以作为基类被其他类继承。当一个类继承自空类时,编译器不会为基类分配任何内存空间。然而,如果一个类有多个空基类,编译器可能会为每个空基类分配一定的内存空间,以确保它们有不同的内存地址。...类型安全的标记:空类可以作为一种类型安全的标记或标识符使用。例如,我们可以定义一个空类,然后使用它来创建一个特殊的函数重载,这个重载只有在给定一个空类对象时才会被调用。...它们封装了数据和操作数据的方法,形成了一种强大的抽象机制。当我们创建一个类时,C++编译器默默地为我们提供了六个默认的成员函数,它们是类的生命线,负责对象的创建、复制、移动和销毁。...当我们没有为类定义任何构造函数时,C++会提供一个默认的构造函数,它不接受任何参数,也不执行任何操作。但是,它的存在确保了我们可以创建类的对象。...当我们需要复制一个对象时,拷贝构造函数就会被调用。如果我们没有定义拷贝构造函数,C++会提供一个默认的拷贝构造函数,它会逐个复制对象的所有成员。

    7000

    【笔记】《Effective C++》条款26-55

    , 例如对基类的构造, 大量的异常处理等....所以尽可能使用复合 private继承的唯一好处是空间最优化, 当我们需要让自己的类拥有一个空类(连虚函数都没有的类)时, 如果用复合会占用至少1个字节(多数情况下由于对齐会是一个int的大小), 但是用继承则由于空白基类类最优化..., 编译器才会开始编译 当然如果传入参数有误编译器依然会报错 任何时候想要在模板中使用一个嵌套从属名称时都需要以上处理, 包括参数列中...., 且也一起提供了定义式供给连接器 如果想要减少这种奇怪的语法的影响, 可以选择让inline的函数去调用真正计算的函数, 起到跳板的作用. 47 请使用traits classes 表示类型信息 traits...申请内存失败的时候抛出, 这个异常不会被new捕获 不返回: 无计可施时调用abort()或exit()结束 如果想让自己的类支持自定义new-handler, 应该在类内设定static的new-handler

    93330

    编程思想 之「异常及错误处理」

    通过把原始异常当做参数传递给新异常的构造器使得即使当前位置创建并抛出了新的异常,也能通过异常链追踪到异常最初发生的位置。...在Throwable的子类中,只有三种基本类型的异常提供了带cause参数的构造器,分别为Error、Exception和RuntimeException。.../** * 构造同一类型异常链使用构造器即可 * * @throws Exception */ private static void catchExceptionStructure() throws...这个限制意味着,当基类使用的代码应用到其派生类对象的时候,一样能正常工作,异常也不例外。...对于异常的限制,有几点需要我们特别注意: 异常限制对构造器不起作用; 派生类构造器的异常说明必须包含基类构造器的异常说明; 派生类构造器不能捕获基类构造器抛出的异常。

    42130

    C++异常处理深度探索:从基础概念到高级实践策略

    四、自定义异常体系 在C++中,自定义异常体系通常涉及创建自己的异常类,这些类可以继承自标准库中的异常基类(如std::exception、std::logic_error或std::runtime_error...通过这样做,你可以定义特定于你应用程序或库的异常类型,并提供额外的信息或行为。 以下是如何自定义异常体系的一些步骤和示例: 4.1 定义异常类 首先,你需要定义一个新的异常类。...异常安全性:在构造函数、析构函数或资源管理类(如RAII类)中避免抛出异常,除非你有特别的理由并且知道如何处理它。 错误消息:提供清晰、有用的错误消息,以帮助调试和诊断问题。...文档:为你的自定义异常类提供文档,说明它们的用途、何时抛出以及如何处理。 通过自定义异常体系,你可以更好地控制你的应用程序或库中的错误处理,并提供更具体、更有用的错误信息给最终用户或开发者。...以下是对C++标准库异常体系的详细介绍: 5.1 异常类的基类 std::exception:这是所有标准异常类的基类。它提供了一个虚函数what(),该函数返回一个描述异常的C风格字符串。

    20110

    C++面试题

    直接初始化实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。 拷贝初始化实际上是要求编译器将右侧运算对象拷贝到正在创建的对象中,通常用拷贝构造函数来完成。...虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。...构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它但析构却不一定,我们往往通过基类的指针来销毁对象。...当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码——既不是为基类,也不是为它的派生类(因为类不知道谁继承它)。所以它使用的VPTR必须是对于这个类的VTABLE。...而子类析构函数具有析构掉基类的职责,所以不会造成内存泄漏。而基类并不知道自己的子类。 4. 构造函数和析构函数能抛出异常吗? 不能。 5. 多继承存在什么问题?如何消除多继承中的二义性?

    1.7K42

    编程思想 之「异常及错误处理」

    通过把原始异常当做参数传递给新异常的构造器使得即使当前位置创建并抛出了新的异常,也能通过异常链追踪到异常最初发生的位置。...在Throwable的子类中,只有三种基本类型的异常提供了带cause参数的构造器,分别为Error、Exception和RuntimeException。.../** * 构造同一类型异常链使用构造器即可 * * @throws Exception */ private static void catchExceptionStructure() throws...即当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。这个限制意味着,当基类使用的代码应用到其派生类对象的时候,一样能正常工作,异常也不例外。...对于异常的限制,有几点需要我们特别注意: 异常限制对构造器不起作用; 派生类构造器的异常说明必须包含基类构造器的异常说明; 派生类构造器不能捕获基类构造器抛出的异常。

    1.5K60

    译 | 你到底有多精通 C# ?

    重载方法中的 null 值 在转到其他话题之前,让我们仔细了解在调用参数数量相同但类型不同的重载方法时如何处理空值。...类初始化 最佳实践建议尽可能避免类构造函数中的类初始化,以防止异常。 所有这些对于静态构造函数来说都更加重要。 您可能知道,当我们尝试在运行时实例化静态构造函数时,它在实例构造函数之前调用。...,上面的代码应该捕获静态构造函数引发的异常,更改配置以避免在以后的调用中引发异常,最后成功地创建类的实例,对吗?...不幸的是,不对。 类的静态构造函数只调用一次。如果它引发异常,则每当您要创建实例或以任何其他方式访问类时,都将重新引发此异常。 在重新启动进程 (或应用程序域) 之前,该类实际上无法使用。...原因是派生类的初始化顺序: 首先,实例字段按从派生最远的到基类的顺序进行初始化。 其次,构造函数按从基类到派生最远的类的顺序调用。

    84240

    【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

    而若是要更复杂一些的逻辑来初始化静态成员变量,那么可以使用静态构造函数。 ● 使用静态构造函数而不是静态初始化器最常见的理由就是处理异常。在使用静态初始化器时,我们无法自己捕获异常。...这样既可以避免代码重复,也可以利用构造函数初始化器来生成更高效的目标代码。 ● C#编译器将把构造函数初始化器看做是一种特殊的语法,并移除掉重复的变量初始化器以及重复的基类构造函数调用。...这样使得最终的对象可以执行最少的代码来保证初始化的正确性。 ● 构造函数初始化器允许一个构造函数去调用另一个构造函数。而C# 4.0添加了对默认参数的支持,这个功能也可以用来减少构造函数中的重复代码。...你可以将某个类的所有构造函数统一成一个,并为所有的可选参数指定默认值。其他的几个构造函数调用某个构造函数,并提供不同的参数即可。...抽象基类则为一组相关的类型提供了一个共同的抽象。也就是说抽象基类描述了对象是什么,而接口描述了对象将如何表现其行为。 2)接口不能包含实现,也不能包含任何具体的数据成员。

    1.8K30

    C++ 类使用规范建议

    定义:新建一个没有参数的对象时,默认构造函数被调用,当调用new[](为数组)时,默认构造函数总是被调用。 优点:默认将结构体初始化为“不可能的”值,使调试更加容易。...提供默认构造函数的原因是:如果你没有提供其他构造函数,又没有定义默认构造函数,编译器将为你自动生成一个,编译器生成的构造函数并不会对对象进行初始化。...综上所述,在类数据成员中使用到自定义类型时,使用指针是一个较为明智地选择,有如下几个优点: (1)成员对象类的变化不会引起包含类的重编译; (2)支持惰性计算,不创建不使用的对象,效率更高; (3...15.小结 关于类的注意事项和使用规范,总结一下: (1)不在构造函数中做太多逻辑相关的初始化; (2)编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数...其他基类均为纯接口; (8)接口类类名以Interface为后缀,除提供带实现的虚析构函数、静态成员函数外,其他均为纯虚函数,不定义非静态数据成员,不提供构造函数,提供的话,声明为protected;

    1.8K20

    【Python 入门第十八讲】Try Except的应用

    例如# 一个用于创建用户定义异常的 Python 程序# 类 MyError 派生自超类 Exceptionclass MyError(Exception): # 构造函数或初始化器 def...此基类由各种用户定义类继承,以处理不同类型的 python 引发异常并带有消息# 定义 Python 用户自定义异常class Error(Exception): """其他异常的基类"""...print()示例 2:从超类异常派生错误当模块需要处理多个不同的错误时,会创建超类异常。执行此操作的常见方法之一是为该模块定义的异常创建基类。...异常的值存储在 error 中except TransitionError as error: print('Exception occurred: ', error.msg)如何使用标准异常作为基类...运行时错误是一个类,它是当生成的错误不属于任何类别时引发的标准异常。此程序演示如何将运行时错误用作基类,将网络错误用作派生类。以类似的方式,可以从 Python 的标准异常派生异常。

    39720

    设计规则

    本节内容 规则 描述 CA1000:不要在泛型类型中声明静态成员 调用泛型类型的静态成员时,必须指定该类型的类型参数。 当调用不支持推理的泛型实例成员时,必须指定该成员的类型参数。...CA1012:抽象类型不应具有构造函数 抽象类型的构造函数只能由派生类型调用。 由于公共构造函数用于创建类型的实例,但无法为抽象类型创建实例,因此具有公共构造函数的抽象类在设计上是错误的。...CA1032:实现标准异常构造函数 如果不能提供完整的构造函数集,要正确处理异常将变得比较困难。...CA1061:不要隐藏基类方法 如果派生方法的参数签名只是在类型方面有所不同,而且与基方法的参数签名中的对应类型相比,这些类型的派生方式更弱,则基类型中的方法由派生类型中的同名方法隐藏。...CA1064:异常应该是公共的 内部异常仅在其自己的内部范围内可见。 当异常超出内部范围后,只能使用基异常来捕获该异常。

    2K20

    七、构造函数与析构函数

    构造函数可以抛出异常,但通常建议避免在构造函数中抛出异常,因为这可能导致资源泄漏或其他问题。 构造函数可以是虚函数(在基类中),但通常不建议这样做,因为虚函数主要用于在派生类中重写基类中的函数。...析构函数可以是虚函数,这在处理基类指针指向派生类对象(多态)时非常重要。通过将基类的析构函数声明为虚函数,可以确保在删除基类指针时调用正确的析构函数(即派生类的析构函数)。...调用顺序: 在创建派生类对象时,首先调用基类的构造函数,然后调用派生类的构造函数。 如果在类定义中显式地指定了初始化列表中的基类或成员变量初始化顺序,则按照指定的顺序进行初始化。...如果使用new运算符在堆上动态分配的对象,则当delete运算符被用于该对象时,析构函数会被调用。 调用顺序: 在销毁派生类对象时,首先调用派生类的析构函数,然后调用基类的析构函数。...用途: 为对象的成员变量提供默认值。 如果类中有自定义类型的成员变量,编译器生成的默认构造函数会调用这些成员的默认构造函数进行初始化。

    13910

    硬核 | C++ 基础大全

    一般构造函数: 也称重载构造函数,一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同,创建对象时根据传入参数不同调用不同的构造函数。...如果没有显示的写拷贝构造函数,则系统会默认创建一个拷贝构造函数,但当类中有指针成员时,最好不要使用编译器提供的默认的拷贝构造函数,最好自己定义并且在函数中执行深拷贝。...派生类中重写了这个虚函数,我们期望着根据对象的真实类型不同,而调用各自实现的虚函数,但实际上当我们创建一个派生类对象时,首先会创建派生类的基类部分,执行基类的构造函数,此时,派生类的自身部分还没有被初始化...每一个类必须有一个析构函数,用户可以自定义析构函数,也可以是编译器自动生成默认的析构函数。一般析构函数定义为类的公有成员。 构造函数的执行顺序?析构函数的执行顺序? 构造函数顺序 基类构造函数。...当初始化一个引用成员变量时; 初始化一个 const 成员变量时; 当调用一个基类的构造函数,而构造函数拥有一组参数时; 当调用一个成员类的构造函数,而他拥有一组参数; 编译器会一一操作初始化列表,以适当顺序在构造函数之内安插初始化操作

    1.2K10

    Google C++编程风格指南(四)之类的相关规范

    定义:新建一个没有参数的对象时,默认构造函数被调用,当调用new[](为数组)时,默认构造函数总是被调用。 优点:默认将结构体初始化为“不可能的”值,使调试更加容易。...提供默认构造函数的原因是:如果你没有提供其他构造函数,又没有定义默认构造函数,编译器将为你自动生成一个,编译器生成的构造函数并不会对对象进行初始化。...14.以指针代替嵌入对象或引用[4]^{[4]} 设计类遇到自定义类型的数据成员时,可以有三种方式: a.嵌入对象(组合) b.使用对象引用 c.使用对象指针 这三种方式孰优孰劣?...综上所述,在类数据成员中使用到自定义类型时,使用指针是一个较为明智地选择,有如下几个优点: (1)成员对象类的变化不会引起包含类的重编译; (2)支持惰性计算,不创建不使用的对象,效率更高;...15.小结 关于类的注意事项和使用规范,总结一下: 不在构造函数中做太多逻辑相关的初始化; 编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数

    87921
    领券