C++_C++对象初始化

类定义

 有两种方式:
       一是在类内声明时同时实现,
    另一种是在类内声明函数原型、在类外实现
    
     类内定义的成员函数默认为内联函数
 	类外实现减少编译依赖 减少编译依赖并清晰地分离接口与实现

初始化

显式初始化和隐式初始化	

声明 定义 初始化  --初始值的来源
    单个变量而言,初始化表示现在创建一个新的变量,它的初始值来自一个已经存在的对象,即原来没有值,现在第一次给它一个初值就叫初始化	
	              赋值是两个变量已经有值的情况下,将一个变量值去替换另一个变量值
	类对象:
	     类对象的拷贝初始化 是调用 拷贝构造函数来完成的
		 类对象的赋值操作   是调用类的拷贝赋值运算符 说“=”运算符  进行了重载
先定义再赋值
定义的同时赋值

拷贝初始化 看起来像是给变量赋值,实际上是执行了初始化操作
初始化器列表构造函数初始化(initializer-list constructor)
成员初始器列表(constructor initialize list)以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式

变量 
  内置类型变量(如int,double,bool等),
          如果定义在语句块外(即{}外),则变量被默认初始化为0;
          如果定义在语句块内(即{}内),变量将拥有未定义的值。
对象:
   对象初始化是创建对象并为其分配内存空间的过程
     两个步骤:分配内存和构造对象	
        分配内存是指为对象分配所需的内存空间,
		而构造对象是指初始化对象的成员变量和调用构造函数。		 

    编译器自动调用构造函数进行隐式初始化。
     对象的生命周期取决于它的作用域和存储方式
	 
动态分配内存的方式(即不采用new运算符)	 
初始化器(即使用了圆括号或花括号
直接初始化与拷贝初始化


当创建一个无名临时对象  创建一个有名称的对象 
    T();
   T{};
   new T();
   new T{};	

析构函数

何时调用析构函数: 
 1.对象生命周期结束时,会自动执行析构函数。
   析构函数不返回任何值,没有返回类型,也没有函数参数。由于没有函数参数,因此它不能被重载。
  换言之,一个类可以有多个构造函数,但是只能有一个析构函数。
 2.如果用new运算动态地建立一个对象,那用delete运算符释放该对象时,才会调用析构函数
 3.广义上讲,析构函数的作用并不仅仅限于释放资源方面,它可以执行任意操作,
   用来执行“对象即将被撤销之前程序员所期待的任何操作。

三个成员函数缺一不可:析构函数、复制构造函数、赋值运算符
   原因:普通构造函数是通过赋值操作来初始化,就会有可能存在生成临时成员对象的问题

构造函数-python 比较

python:构造函数(Constructor)
   在Python中,构造函数的名称是__init__  构造函数在类实例化时自动执行
   根据需求创建适合的构造函数来初始化对象的属性
   
    必须包含参数self作为第一个参数,self参数是一个指向实例本身的引用,用于访问类中的属性和方法
  Python认为子类和父类是同等的对象,
   只是子类继承父类后,会保留父类的方法和成员,是否覆盖取决于他自己
     派生类调用基类,则是在派生类中使用super().__init__()
	成员函数需要被手动调用,而构造函数在创建对象的过程中是自动被调用的 
	同一个对象而言,成员函数可以被调用多次,但是,构造函数只能被调用一次

C++  C++中的先调用父类初始化再调用子类初始化方法的现象。
    C++认为子类是父类生的,所以父类必须存在而且先存在

参考

posted @ 2024-12-10 17:13  辰令  阅读(231)  评论(0)    收藏  举报