第17课 - 对象的构造(上)

本文探讨了C++中对象的初始化过程,包括成员变量的默认初始值,并介绍了构造函数的概念及其在对象创建时自动调用以初始化成员变量的作用。

第17课 - 对象的构造(上)

0. 问题

  对象中成员变量初始值是什么?

  下面的类定义中,成员变量 i j 初始值是什么?  对象定义在 全局空间栈上堆上,具有不同的属性。

    

 1 #include <stdio.h>
 2 
 3 class Test
 4 {
 5 private:
 6     int i;
 7     int j;
 8 public:
 9     int getI() { return i; }    // 类成员函数,直接访问
10     int getJ() { return j; }
11 };
12 
13 Test g_test;    // 定义全局的对象
14 
15 int main(void)
16 {
17     // bss段
18     printf("g_test.getI() = %d\n", g_test.getI());    // 0
19     printf("g_test.getI() = %d\n", g_test.getJ());    // 0
20     
21     //
22     Test test;    // 定义对象
23     
24     printf("test.getI() = %d\n", test.getI());    // 随机值
25     printf("test.getI() = %d\n", test.getJ());    // 随机值
26     
27     //
28     Test *pt = new Test;
29     printf("pt->getI() = %d\n", pt->getI());    // 0    堆空间内的值也是随机的,这里是巧合
30     printf("pt->getI() = %d\n", pt->getJ());    // 0
31     
32     delete pt;
33     
34     return 0;
35 }
类成员变量的初始值

1. 对象的初始化

1.1 从程序设计的角度看,对象只是变量,因此:

  (1)在栈上创建对象时,成员变量初始化为随机值

  (2)在堆上创建对象时,成员变量初始化为随机值

  (3)在静态存储区创建对象时,成员变量初始化为0值

1.2 生活中的对象

  (1)生活中的对象都是在初始化之后上市

  (2)初始状态出厂设置)是对象普遍存在的一个状态

  (3)问题:程序中如何对一个对象进行初始化?

1.3 对象初始化的初步尝试

  (1)一般而言,对象都需要一个确定的初始状态

  (2)解决方案:

    ① 在类中提供一个 publicinitialize 函数

    ② 对象创建后立即调用 initialize 函数进行初始化

 1 #include <stdio.h>
 2 
 3 class Test
 4 {
 5 private:
 6     int i;
 7     int j;
 8 
 9 public:
10     int getI() { return i; }
11     int getJ() { return j; }
12 
13     void initialize()
14     {
15         /* int i;  作用域的问题,要看 i 作用域终止的标志 } */
16         i = 1;
17         j = 2;
18     }
19 
20 };
21 
22 Test gt;
23 
24 int main()
25 {
26     gt.initialize();
27 
28     printf("gt.i = %d\n", gt.getI());
29     printf("gt.j = %d\n", gt.getJ());
30 
31     Test t1;
32 
33     //t1.initialize();
34 
35     printf("t1.i = %d\n", t1.getI());
36     printf("t1.j = %d\n", t1.getJ());
37 
38     t1.initialize();
39 
40     Test* pt = new Test;
41 
42     pt->initialize();
43 
44     printf("pt->i = %d\n", pt->getI());
45     printf("pt->j = %d\n", pt->getJ());
46 
47     delete pt;
48 
49     return 0;
50 
51 }
初始化函数
1.4 存在的问题

  (1)initialize 只是一个普通函数,必须显示调用

  (2)如果未调用 initialize 函数或调用 initialize 函数的顺序不对,则程序的运行结果是不确定的

2. 构造函数

  由上面对 对象初始化 的初步尝试之后,为了解决上述方案的缺点,产生了一个大胆的假设,能不能在创建对象时对其自动进行初始化?

  (1)C++ 中可以定义与类名相同的特殊成员函数

  (2)这种特殊的成员函数叫做构造函数

    ① 构造函数没有任何返回类型的声明

    ② 在定义对象时,构造函数自动被调用,用来初始化对象

 1 #include <stdio.h>
 2 
 3 class Test
 4 {
 5 private:
 6     int i;
 7     int j;
 8 
 9 public:
10     int getI() { return i; }
11     int getJ() { return j; }
12 
13     Test()    // 构造函数
14     {
15         printf("Test() Begin\n");
16         
17         i = 1;
18         j = 2;
19        
20         printf("Test() End\n");
21     }
22 };
23 
24 Test gt;
25 
26 int main()
27 {
28     printf("gt.i = %d\n", gt.getI());
29     printf("gt.j = %d\n", gt.getJ());
30     
31     Test t1;
32 
33     printf("t1.i = %d\n", t1.getI());
34     printf("t1.j = %d\n", t1.getJ());   
35 
36     Test* pt = new Test; 
37 
38     printf("pt->i = %d\n", pt->getI());
39     printf("pt->j = %d\n", pt->getJ());
40 
41     delete pt;
42 
43     return 0;
44 }
构造函数初探

3. 小结

  (1)每个对象在使用之前都应该初始化

  (2)类的构造函数用于对象的初始化

  (3)构造函数与类同名并且没有返回值

  (4)构造函数在对象定义时自动被调用

 

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值