iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++的定义,声明和初始化实例分析
  • 945
分享到

C++的定义,声明和初始化实例分析

2023-06-29 09:06:17 945人浏览 泡泡鱼
摘要

这篇文章主要介绍了c++的定义,声明和初始化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的定义,声明和初始化实例分析文章都会有所收获,下面我们一起来看看吧。定义变量的定义用于为变量分配存储空间,

这篇文章主要介绍了c++的定义,声明和初始化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的定义,声明和初始化实例分析文章都会有所收获,下面我们一起来看看吧。

    定义

    变量的定义用于为变量分配存储空间,还可以为变量指定初始值。

    int units_sold;double sales_price, avg_price;std::string title;Sales_item curr_book; // class Sales_item

    初始化

    C++ 支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化则是把初始化式放在括号中。

    int ival(1024); // direct-initializationint ival = 1024; // copy-initialization

    初始化不是赋值。初始化指创建变量并给它赋初始值,而赋值则是擦除对象的当前值并用新值代替。

    当定义没有初始化式的变量时,系统有时候会帮我们初始化变量。

    1.内置类型变量

    (Built-in Types,即int,float,double,void,char,bool等。注意string是标准库定义的类型,不是内置类型)

    在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。

    2.类

    类通过定义一个或多个构造函数来控制类对象的初始化。创建类类型的新对象,都要执行构造函数,保证每个对象的数据成员具有合适的初始值。

    构造函数可以包含一个构造函数初始化列表,以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。与任意的成员函数一样,构造函数可以定义在类的内部或外部。

    构造函数初始化只在构造函数的定义中而不是声明中指定。

    //将 isbn 成员初始化为 book 形参的值,将 units_sold 和 revenue 初始化为 0。Sales_item::Sales_item(const string &book):          isbn(book), units_sold(0), revenue(0.0) { }

    如果没有提供初始化式,那么就会使用默认构造函数。如果类具有默认构造函数,那么就可以在定义该类的变量时不用显式地初始化变量。例如,string 类定义了默认构造函数来初始化 string 变量为空字符串

    string a;cout << "a: " << a <<endl;

    输出:

    a: 

    此外,省略初始化列表在构造函数的函数体内对数据成员赋值是合法的。

    Sales_item::Sales_item(const string &book)     {         isbn = book;         units_sold = 0;         revenue = 0.0;     }

    不管成员是否在构造函数初始化列表中显式初始化,类类型的数据成员总是在初始化阶段初始化。初始化发生在计算阶段开始之前。(也就是函数体执行以前)&rarr; 这里似乎有些难以理解,通过后文的实例也许你能明白

    在构造函数初始化列表中没有显式提及的每个成员,使用与初始化变量相同的规则来进行初始化。运行该类型的默认构造函数,来初始化类类型的数据成员。内置或复合类型的成员的初始值依赖于对象的作用域:在局部作用域中这些成员不被初始化,而在全局作用域中它们被初始化为 0。

    未初始化的变量

    局部作用域的内置类型变量将不被自动初始化,这可能导致其成为未初始化的变量。这是常见的程序错误,但编译器无法检测出所有未初始化变量的使用。&rarr; 你肯定可以理解这可能导致的灾难性后果了(这竟然不可以运行,为什么呢?这竟然可以运行,为什么呢?.jpg)再稍微解释一下原因:问题出在未初始化的变量事实上都有一个值。编译器把该变量放到内存中的某个位置,而把这个位置的无论哪种位模式都当成是变量初始的状态。当被解释成整型值时,任何位模式都是合法的值&mdash;&mdash;虽然这个值不可能是程序员想要的。因为这个值合法,所以使用它也不可能会导致程序崩溃。可能的结果是导致程序错误执行和/或错误计算。

    声明

    声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。

    可以通过使用extern关键字声明变量名而不定义它。extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

    extern int i; // declares but does not define iint i; // declares and defines i

    只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern:

    extern int i = 10; //defines i

    在 C++ 语言中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量。

    实例

    #include <iOStream>#include <string>using namespace std;//类x的声明//如果这一部分放在main()函数后面,报错:error: 'x' was not declared in this scope//在实际工程中,这部分声明将放在头文件(.h)中,而构造函数及成员函数的定义则放在.cpp文件中class x{public:    x(int a, int b, string c);    void print_data();private:    //类数据成员的变量名最好在开头加一个字母m(即member)    int ma;     int mb;    string mc;};int main(){    int a1(2); //直接初始化    int b1 = 3; //复制初始化    string c1; //默认构造函数初始化string变量为空字符串    c1 = "dwkw"; //赋值    x data(a1, b1, c1); //调用构造函数初始化    return 0;    print_data();}//构造函数定义x::x(int a, int b, string c):ma(a), mb(b), mc(c){}//成员函数定义void x::print_data(){    cout << "ma: " << ma << endl;    cout << "mb: " << mb << endl;    cout << "mc: " << mc << endl;}

    输出:

    ma: 2
    mb: 3
    mc: dwkw

    声明时提供初值

    如果在类的声明中就对数据成员提供初值,而不在初始化列表中提供,程序可以执行,输出ma的值为1。

    class x{public:    x(int a, int b, string c);    void print_data();private:    int ma = 1; //声明时提供初值    int mb;    string mc;};//去掉初始化列表x::x(int a, int b, string c):mb(b), mc(c){}

    这一做法在早期版本不予支持,但从c++11就可以了。[2]

    不过这破坏了类的抽象性,并不建议这样做。

    查看c++版本的方法:[3]

    cout << __cplusplus << endl; //输出c++版本

    在构造函数内赋初值,而不用列表

    前面提到省略初始化列表在构造函数的函数体内对数据成员赋值是合法的。

    //去掉初始化列表,在构造函数体内赋值//其它代码保持不变x::x(int a, int b, string c){    cout << "赋值前: " << endl;    print_data();    cout << "赋值后: " << endl;    ma = 4;    mb = 5;    mc = "ser";}

    输出:

    赋值前: 
    ma: 4199744
    mb: 0
    mc: 
    赋值后: 
    ma: 4
    mb: 5
    mc: ser

    实际上我就没写初始化列表,但系统它就会在这里执行初始化。总之就会在执行构造函数体内的语句之前初始化(如果它可以自动初始化),即使根本没写初始化列表。&rarr; 啧,我就像在说绕口令,希望你能明白我的意思

    但是ma和mb都是局部作用域(我不确定类作用域是否是局部作用域,但从输出来看,ma不是0,所以应该没有能够初始化)的内置类型变量,不进行自动初始化;mc有默认构造函数,自动初始化为空字符串。

    而后,执行构造函数体内部的语句,将对ma和mb进行初始化(我想这里应该是初始化而不是赋值),对mc赋值。

    关于“C++的定义,声明和初始化实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++的定义,声明和初始化实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

    --结束END--

    本文标题: C++的定义,声明和初始化实例分析

    本文链接: https://www.lsjlt.com/news/323905.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++的定义,声明和初始化实例分析
      这篇文章主要介绍了C++的定义,声明和初始化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的定义,声明和初始化实例分析文章都会有所收获,下面我们一起来看看吧。定义变量的定义用于为变量分配存储空间,...
      99+
      2023-06-29
    • 一文带你分清C++的定义,声明和初始化
      目录定义初始化1.内置类型变量2.类声明实例声明时提供初值在构造函数内赋初值,而不用列表总结定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值。 int units_so...
      99+
      2024-04-02
    • C#中变量初始化实例分析
      本文小编为大家详细介绍“C#中变量初始化实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中变量初始化实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。请看下面的实例,使用了各种类型的变量:name...
      99+
      2023-06-17
    • C语言入门篇--变量[定义,初始化赋值,外部声明]
      1.变量 变量即变化的量。 C语言中用 常量 来表示不变的值,用 变量 表示变化的值。 eg:输出26个字母 #include <stdio.h> int main(...
      99+
      2024-04-02
    • Vue实例初始化的示例分析
      这篇文章将为大家详细讲解有关Vue实例初始化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。以下正式开始:Vue官网的生命周期图示表重点说一下 new Vue()...
      99+
      2024-04-02
    • C++之vector容器的的声明初始化和增删改查
      C++vector容器  C++中有两种类型的容器:顺序容器和关联容器。 顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实...
      99+
      2024-04-02
    • C#中怎么定义和初始化数组
      这篇文章给大家介绍C#中怎么定义和初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一维数组 一维数组以线性方式存储固定数目的项,只需一个索引值即可标识任意一个项。在 C# 中,数组声明中的方括号必须跟在数据类型...
      99+
      2023-06-17
    • SpringMVC初始化流程实例分析
      本文小编为大家详细介绍“SpringMVC初始化流程实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringMVC初始化流程实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.HttpServl...
      99+
      2023-07-02
    • c/c++中变量的声明和定义深入解析
      不管是函数还是变量的声明 ,都是为了告诉编译器我要使用这个变量或者函数了,用于类型检查。在定义 的时候编译器是不会分配任何内存的, 比如下面的函数:复制代码 代码如下:void fu...
      99+
      2022-11-15
      变量 c++ c
    • C语言示例讲解结构体的声明与初始化方法
      目录一、结构体声明的结构1.直接声明2.使用typedef声明一个新的类型3.不完全声明二.结构体初始化1.声明(同时定义)时直接赋值2.定义时直接赋值3.定义后赋值4.指定初始化一...
      99+
      2024-04-02
    • Android中ActivityThread和APP初始化的示例分析
      这篇文章将为大家详细讲解有关Android中ActivityThread和APP初始化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ActiviryThreadActivityThread的初始...
      99+
      2023-06-15
    • vue-router初始化的示例分析
      这篇文章主要为大家展示了“vue-router初始化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-router初始化的示例分析”这篇文章吧。v...
      99+
      2024-04-02
    • C++树的定义实例分析
      这篇文章主要介绍“C++树的定义实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++树的定义实例分析”文章能帮助大家解决问题。概念本文以一个简单的树为例,如下图,来记录树的一些概念。树一种由...
      99+
      2023-07-02
    • Spring框架初始化的示例分析
      这篇文章将为大家详细讲解有关Spring框架初始化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Spring能做什么?Spring的主要目的是使J2EE易用和促进好编程习惯。倒置控制容器 S...
      99+
      2023-05-30
      spring
    • CSS5初始化模板的示例分析
      这篇文章给大家分享的是有关CSS5初始化模板的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 CSS5初始化模板席卷了GBK编码内容和UTF-8编码内容的两个编码模板。...
      99+
      2024-04-02
    • Go语言基础变量的声明及初始化示例详解
      目录一、概述二、声明变量三、编译器推导类型的格式【一定要赋值】四、短变量声明并初始化五、匿名变量——没有名字的变量六、注意七、案例一、概述 变量的功能是存储用户的数据 二、声明变量 ...
      99+
      2024-04-02
    • Java类和对象初始化过程的示例分析
      这篇文章主要介绍了Java类和对象初始化过程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  问题引入  近日我在调试一个枚举类型的解析器程序,该解析器是将数据库内...
      99+
      2023-06-03
    • webstorm+vue初始化项目的示例分析
      小编给大家分享一下webstorm+vue初始化项目的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vue新项目准备:1、安装nodejs,官网下载傻瓜安装node -v 验证2、...
      99+
      2024-04-02
    • Java中实例初始化和静态初始化的过程详解
      目录一、实例初始化1.1 实例初始化过程1.2 实例初始化的顺序1.3 实例初始化的注意事项二、静态初始化2.1 静态初始化过程2.2 静态初始化的顺序2.3 静态初始化的注意事项三...
      99+
      2023-05-18
      Java实例初始化和静态初始化 Java实例初始化 Java静态初始化 Java初始化
    • Vue.js之初始化el以及数据绑定的示例分析
      小编给大家分享一下Vue.js之初始化el以及数据绑定的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、初始化el2、...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作