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

C++C++ this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 构造函数设置默认参数值 | 返回匿名对象返回引用 )

return s; } 详细代码 , 参考最后完整代码示例 ; 二、构造函数设置默认参数值 ---- 为 Student 类定义了构造函数 , 则其默认无参构造函数 , 就不会生成...执行 Student 构造函数" << endl; } 此时 , 如果要创建 Student 对象 , 只能调用上述 构造函数 , 如果使用 Student s2 方式调用 默认构造函数 创建...Student 对象 , 就会报错 ; 如下带参数构造函数 , 并且为其 构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象方式定义对象变量 ; class Student...public: int age; // 年龄 int height; // 身高 }; 此时就可以使用默认构造函数 , 创建 Student 对象 ; 三、返回匿名对象返回引用 ---- 在上面的章节...创建 Student 实例对象 Student s(18, 180); // 打印对象情况 s.print(); // 调用构造函数 , 构造函数参数使用默认值 Student s2

17920

C++ Java 默认虚拟行为不同及其异常处理比较

默认虚拟行为不同 方法默认虚拟行为在 C++ Java 是相反: 在 C++ ,类成员方法默认是非虚拟。...以下是 Java C++ 异常处理之间差异。 1) 在 C++ ,所有类型(包括原始类型指针)都可以作为异常抛出。...但是在 Java ,只有可抛出对象(Throwable 对象是 Throwable 类任何子类实例)可以作为异常抛出。例如,以下类型代码适用于 C++,但类似的代码不适用于 Java。...在 Java 两种类型异常 - 已检查未检查。 5) 在Java,新关键字throws用于列出函数可以抛出异常。...但是在 Java ,如果系统生成异常没有被捕获,那么 Java 运行时系统 (JVM) 会将异常对象移交给默认异常处理程序,它基本上会打印名称、描述以及异常发生在哪一行。

91520
您找到你想要的搜索结果了吗?
是的
没有找到

C++标准库类型vector

v1 {a, b, c}; vector v1 = {a, b, c}; 注意vector括号括号初始化是不同:圆括号是通过调用vector构造函数进行初始化,如果使用了括号那么初始化过程会尽可能会把括号值当做元素初始值列表来处理...如果初始化时使用了括号但是提供值又无法用来列表初始化,那么就考虑用这些值来调用vector构造函数了。...v中元素数量 v[n] // 返回v第n个位置上元素引用 v1 == v2 v1 !...C++标准要求vector能在运行时高效快速地添加元素,既然vector对象能高效地增长,那么定义vector对象时候设定其大小也就没什么必要了,事实上如果这么做性能可能更差。...只有一种例外情况,就是所有元素值都一样。一旦元素值有所不同,更有效方法是先定义一个vector对象,再在运行时向其中添加具体值。

1.1K10

C++列表初始化,你知多少?

我是木荣,今天我们学习一下C++列表初始化相关知识。 unsetunset1、何为列表初始化unsetunset C++列表初始化是一种用一对括号 {} 来进行对象初始化语法。...列表初始化 在某些情况下,可以使用括号 {} 进行初始化,这会被解释为对应类型默认值。...return 0; } 在上述代码,MyClass obj(); 被编译器解释为声明一个返回 MyClass 类型函数而不是创建一个 MyClass 类型对象。...这是因为在 C++ ,如果声明一个函数时候带有空括号,编译器会将其解释为一个函数声明而不是一个对象定义。...因此,在声明初始化对象时,特别是在有可能发生 most vexing parse 地方,建议使用括号初始化或括号初始化,以避免潜在问题。

5810

【笔记】《C++Primer》—— 第一部分:C++基础

reinterpret_cast非常危险,它可以将任何指针类型重新指向,例如将char*改为int*,这会很容易引发难以追踪错误 5 语句 用括号括起来多条语句称为复合语句或语句块,在括号变量同个作用域...,表示忽视多余实参 不要返回不可拷贝局部变量,也不要返回对局部变量引用或指针 C11规定可以使用括号,利用vector类型来返回列表值 返回数组指针时,要注意保持好正确写法:先看括号,从括号内往括号外看...当构造函数时,编译器将不会默认创建构造函数,C11此时可以用 [类名]()=default 来要求编译器生成一个默认行为 在构造函数函数体间用冒号连接一段以逗号分隔调用串,调用名为函数成员,即为构造函数初始值列表...,这里剩余部分即后面的参数列表函数体,不包含前面的返回部分 类名字查找过程几处不同,首先处理类成员声明,再当类全部可见后再编译函数体,详细过程在7.4 强烈建议不要使函数内部名字与类内名字重名...想使用默认构造函数时,方法是初始化对象时不使用后面的调用运算符(即小括号对),如直接写Test a; 当构造函数*只接受一个*实参时,称转换构造函数,即定义了这种类型隐式转换机制,在这种情况下我们对实参输入编译器可以自动地进行

1.4K40

C++:26---动态内存管理new、delete

newdelete是运算符不是函数 因此C++语言需要一个能完成动态内存分配初始化工作运算符new,以及一个能完成清理与释放内存工作运算符delete。...int *p2(new int(1)); //同上 二、new值初始化规则 通用规则 如果类型名后无括号:内置类型或组合类型对象值是未定义,而类类型对象将用默认构造函数进行初始化 如果类型名后有括号...:则内置类型/组合类型/类类型都进行默认初始化 br C++11标准下初始化规则 允许使用括号来指定初始化列表 注意:括号{}本质上是用来当一个列表 vector *vec = new...,作为初级程序员容易犯这样错误,认为只要delete之后,自己就不负责任了(实际上你这种行为渣男什么区别,明明已经和你前女友分手了,你还留着人家各种信息人家藕断丝连,偶尔还用保存着前女友某一个把柄来威胁前女友...但是如果是C++对象数组就不同了!我将会在接下来第28节说到这块

65020

《Effective Modren C++》 进阶学习(上)

那完美的标准是什么,我想不同设计师都会有自己一套标准。而在实际编码,如何将个人标准愈发完善,愈发得到同事认可,一定需要不断积累。...调用拷贝函数 从上述看,在C++这三种方式都被指派为初始化表达式,但是只有括号任何地方都能被使用。因此括号初始化又叫统一初始化。...w4{10, 5.0}; // 使用括号初始化,调用第二个构造函数 最后在使用参数{}初始化时,会匹配默认构造函数,只有传入{}才会匹配initializer_list构造函数。...对于数值类型std::vector来说使用括号初始化括号初始化会造成巨大不同。...理解特殊成员函数生成 在C++术语,特殊成员函数是指自己生成函数。C++98四个:默认构造函数、析构函数、拷贝构造函数拷贝赋值函数。

17020

C++八门初始化规则

总结 初始化概念:创建变量时赋予它一个值(不同于赋值概念) 类构造函数控制其对象初始化过程,无论何时只要类对象被创建就会执行构造函数 如果对象未被用户指定初始值,那么这些变量会被执行默认初始化...编译器会把等号右侧初始值拷贝到新创建对象中去,不使用等号则执行是直接初始化 传统C++列表初始化仅能用于普通数组POD类型,C++11新标准将列表初始化应用于所有对象初始化(但是内置类型习惯于用等号初始化...C++98/03与C++11列表初始化 在C++98/03,普通数组POD(Plain Old Data,即没有构造、析构虚函数类或结构体)类型可以使用括号{}进行初始化,即列表初始化。...int y; } my_data = { 1, 2 }; } C++11新标准列表初始化得到了全面应用,不仅兼容了传统C++普通数组POD类型列表初始化,还可以用于任何其他类型对象初始化...总的来说,圆括号是通过调用vector构造函数进行初始化,如果使用了括号那么初始化过程会尽可能会把括号值当做元素初始值列表来处理。

2.5K10

c浅拷贝深拷贝区别_js深拷贝浅拷贝区别

return 0; } 执行结果:调用一次构造函数,调用两次析构函数,两个对象指针成员所指内存相同,这会导致什么问题呢?...所以,在对含有指针成员对象进行拷贝时,必须要自己定义拷贝构造函数,使拷贝后对象指针成员自己内存空间,即进行深拷贝,这样就避免了内存泄漏发生。...; 2.当函数返回值为一个对象时,该对象实际上是函数内对象一个拷贝,用于返回函数调用处。...关于std::shared_ptr原理实现可参考:C++笔试题之smart pointer实现 一个完整自定义类实现可参考:C++笔试题之String类实现 参考链接:https://www.cnblogs.com.../always-chang/p/6107437.html 深拷贝浅拷贝区别 16913 深浅拷贝区别: 浅拷贝是将原始对象数据型字段拷贝到新对象中去,将引用型字段“引用”复制到新对象中去

70630

C++面试题之浅拷贝深拷贝区别

:调用一次构造函数,调用两次析构函数,两个对象指针成员所指内存相同,这会导致什么问题呢?...两个对象指针成员所指内存不同。...再说几句: 当对象存在指针成员时,除了在复制对象时需要考虑自定义拷贝构造函数,还应该考虑以下两种情形: 1.当函数参数为对象时,实参传递给形参实际上是实参一个拷贝对象,系统自动通过拷贝构造函数实现...; 2.当函数返回值为一个对象时,该对象实际上是函数内对象一个拷贝,用于返回函数调用处。...关于std::shared_ptr原理实现可参考:C++笔试题之smart pointer实现 一个完整自定义类实现可参考:C++笔试题之String类实现 参考链接:https://www.cnblogs.com

35520

C++ Primer Plus 第02章 开始学习C++ 学习笔记

函数头描述 main() OS(UNIX/Linux、Windows、mac os等)直接接口。 括号main() 不接受任何参数。...每个函数都有一个开始括号一个结束括号,两个括号各占一行。 函数语句都相对于括号进行缩进。 与函数名称相关括号周围没有空白。 2....3.2 类简介 类是C++ 面向对象编程(OOP)核心概念之一。 什么是类? 类是用户定义一种数据类型。 要定义类,需要描述它能够表示什么信息可对数据执行什么操作。...函数 两种C++函数 返回值 无返回值 4.1 返回函数 返回函数将生成一个值,而值将赋值给变量或其他表达式中使用。...如果省略void,让括号,则C++解释为一个不接受任何参数隐式声明。

70900

初始化|这些年踩过

最近在整理Modern CPP某些新特性,恰好到了这块,所以就聊聊咯~~ 统一初始化又称为列表初始化,自C++11引入,使用括号(Brace-initialization)方式,主要目的是为了简化统一不同初始化方式...是Modern C++开发人员最应该了解掌握新特性之一。它出现,消除了以前在初始化基本类型、聚合类型非聚合类型、以及数组标准容器之间区别,以提供更一致初始化语法。...:a_(a) {} }; foo f1 = 42; •对于非聚合类,也可以使用后面跟括号方式(括号传入参数),对于不需要参数则不能添加括号,否则编译器会认为是函数声明 foo f1;...之所以有这个报错,是因为当C++无法区分“对象创建”“函数声明”时,编译器默认将该语句解释为“函数声明”。...编译器个特点,对于以括号初始化方式则认为是统一初始化,如果构造函数同样存在std::initializer_list为参数构造函数,那么则优先调用: class MyClass { public

16610

【笔记】《C++Primer》—— 第3章

(5)string构造函数参数可以是(num,char),从而得到重复了num次char字符串。 ? empty()可以返回一个string是否为,size()返回字符数量。...这里可以看到我遍历字符串使用是一种比较特殊for,这是C11增加range-for,括号冒号前是从后面的序列得到一个对象,这种写法在很多现代语言中都被支持了。...matlab矩阵不同,vector不能给不存在元素赋值,这会导致错误而不是扩大vector。 相类似的,为了防止越界建议使用range-for遍历。 ?...3.5 最后还是要说到最原始数组指针,其实没什么好讲,突出一点就是C++封装好类可以用,所以不是很必要了。 数组索引类型是size_t,也是无符号数。...3.6 多维数组也就是数组数组。 可以使用多层括号来初始化,未初始化元素遵循之前规律。 配合C11autorange-for可以使得对多维数组遍历变得异常方便。

91320

C++构造函数 | 构造函数

++对象是一个实体,它反映了客观事物属性,是应该有确定。...class Time {   public:   day;   hour;   minute; }; Time time={25,19,54}; 上述对象结构体变量初始化是差不多,在一个括号内顺序列出各公用数据成员值...C++构造函数作用 C++提供了构造函数来处理对象初始化,构造函数是一 种特殊成员函数,与其他成员函数不同,不需要程序员来调用它,而是在建立对象时自动执行。...构造函数名字必须与类名同名,而不能由程序员任意命 ,以便编译系统能识别它并把它作为构造函数处理,构造函数不具有任何类型,不返回任何值,它功能是由程序员定义,程序员根据初始化要求设计函数体函数参数...如果用户自己没有定义构造函数,则C++编译系统会自动生成一个构造函数,只是这个构造函数函数体是,也没有参数,不执行初始化操作。

2.1K74

C++核心编程(上)

来源:CSDN|晚风间寺中人 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++核心精髓。...区别 在C++ structclass唯一区别就在于 默认访问权限不同 区别: struct 默认权限为公共 class 默认权限为私有 class C1 { int m_A; //默认是私有权限...对象初始化清理工作是编译器强制要我们做事情,因此如果我们不提供构造析构,编译器会提供 编译器提供构造函数析构函数是实现。...return 0; } 4.2.3 拷贝构造函数调用时机 C++拷贝构造函数调用时机通常有三种情况 使用一个已经创建完毕对象来初始化一个新对象 值传递方式给函数参数传值 以值方式返回局部对象 示例...默认情况下,c++编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体为) 2.默认析构函数(无参,函数体为) 3.默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下: 如果用户定义构造函数

1.8K30

Chapter 3: Moving to Modern C++

Distinguish between () and {} when creating objects C++11,初始化值指定方式三种:括号初始化,等号初始化括号初始化;其中括号初始化是为了解决...private: int x {0}; // ok int y = 0; // ok int z(0); // error }; 括号初始化括号初始化可以用于不可拷贝对象初始化...= x+y+z; // ok 调用对象无参构造函数时,使用括号初始化会被编译器错误识别为声明了一个函数,而括号初始化则能正确匹配到无参构造函数调用 Widget w1(); // error Widget...std::initializer_list构造函数时,此时调用括号初始化,编译器会解析为调用默认构造函数,而要解析成std::initializer_list构造函数,需要在括号嵌套一个括号进行初始化...Understand special member function generation 特殊成员函数是C++会自动生成函数,C++98四个这样函数:默认构造函数,析构函数,拷贝构造函数,拷贝赋值运算符

1.8K60

C++对象以及成员函数

参考链接: 如何通过C++函数传递返回对象? 一个实体拥有自己属性行为,属性是私有的,行为是共有的,在C++实体对应就是对象,实体抽象数据类型就是类,属性是成员变量,行为是成员函数。 ...private:只有在类才能被访问。  如果在class类没有说明是public还是private,则默认是private。  类结构体都是自定义类型,那么他两之间什么区别呢? ...在C++,结构体默认是全部都可见,而类默认是私有的。 ...那么类定义类外定义什么区别呢??  ①如果在类定义,在函数调用时候编译器会当做内联函数处理,在调用点将代码展开;  ②如果在类外定义,在函数调用时普通函数一样,进行栈桢开辟回退。 ...没有实现构造函数系统会给出默认构造函数,如果有系统就不会调用默认构造函数,实例化一个不带参对象不用加括号,比如对象1,带了括号就是函数意思。

1.3K20

C++-->类

作用域包括:类内部(括号之内), 定义在类外部成员函数参数表(小括号之内)函数体(括号之内)。...二 构造函数 构造函数是特殊成员函数,用来保证每个对象数据成员具有合适初始值。 构造函数名字与类名相同,不能指定返回类型(也不能定义返回类型为void),可以0-n个形参。...(4) 两种初始化形式 C++ 支持两种初始化形式:直接初始化复制初始化。直接初始化将初始化式放在圆括号,复制初始化使用 = 符号。...(5)形参返回值 当形参或返回值为类类型时,由该类复制构造函数进行复制。 (6)初始化容器元素 复制构造函数可用于初始化顺序容器元素。...如果使用常规括号括住数组初始化列表来提供显式元素初始化式,则使用复制初始化来初始化每个元素。

71530

C++ | 对象初始化清理

今天来分享一下C++对象初始化清理。主要是介绍构造函数析构函数,另外也会讲一下列表初始化和静态成员这些。...在C++对象也是如此。一个对象或者变量没有初始化拿去用,结果是未知。使用完之后不去清理,也可能造成安全问题。 为了解决这样问题,于是引入了构造函数析构函数。...return 0; } 2、拷贝构造函数调用时机 C++拷贝构造函数调用时机通常有三种情况 使用一个已经创建完毕对象来初始化一个新对象 值传递方式给函数参数传值 以值方式返回局部对象...默认情况下,c++编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体为) 2.默认析构函数(无参,函数体为) 3.默认拷贝构造函数,对属性进行值拷贝 简单说,构造函数调用规则就是:...当用户自定义了拷贝构造函数时候,系统就不会添加默认无参构造函数,也不会添加有参构造函数。这一点在使用时要特别注意,什么时候默认什么时候没有默认

1.5K40

C++(STL):01---pair容器

一、pair历史概述 C++标准库第1版(C++98),提供了一个简单class,用来处理类型不同两个(一对)值,这个就是pair。...val2类型和数值 三、构造函数、赋值、移动语义 规则: ①定义pair时,不给出值时,使用默认构造函数初始化 ②使用圆括号/括号初始化器进行初始化 默认构造函数 规则:默认构造函数生成一个pair...时,其元素分别执行默认构造函数 演示案例: //保存两个string,两个string初始化为 pair anon; //保存一个string一个size_t,string...这种特殊初始化发生在当我们需要安放(emplace())一个新元素到(unordered)map或multimap时 拷贝构造函数 拷贝构造函数3个版本: 版本1:接收相同类型pair 版本2:...其他运算符原理类似 九、 pair运用实例 C++标准库大量使用pair: 例如(unordered)mapmultimap容器元素类型都是pair,也就是一对key/vaule C++标准库凡“

73820

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券