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

【C++】构造函数调用规则 ( 默认构造函数 | 默认构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )

一、默认构造函数 C++ 类中 2 种特殊的构造函数 , 分别是 : 默认构造函数 : 如果 C++ 类中 没有定义构造函数 , C++ 编译器会自动为该类提供一个 " 默认的构造函数 " ,...没有为 C++ 类定义 构造函数 , C++ 编译器 将自动为该类 生成一个默认的构造函数 ; 定义了构造函数 : 如果为 C++ 类 定义了其他类型的构造函数 ( 有构造函数 / 构造函数...MyClass { public: int x; // 默认构造函数 MyClass() { } }; 下面的代码 , 会自动调用 默认的 构造函数...& other) { x = other.x; } }; 下面的代码 , 第一行代码会自动调用默认的构造函数 , 第二行代码会自动调用默认的拷贝构造函数 ; MyClass...obj; // 调用默认构造函数 MyClass obj2 = obj; // 调用默认拷贝构造函数 二、构造函数调用规则 ---- 1、构造函数规则说明 构造函数调用规则 : 提供 默认构造函数

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

    【C++】构造函数分类 ① ( 构造函数分类简介 | 构造函数 | 有构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )

    一、构造函数分类 1、构造函数分类简介 C++ 构造函数可以分为以下几类 : 构造函数 : 最简单也是默认的构造函数 , 函数没有参数 , 如果创建一个对象 , 没有传入参数 , 调用的就是该类型的...int m_age; char* m_name; 构造函数 构造函数 : 只负责为指针类型的成员变量分配内存 , 并赋值一个初始值 , 没有具体的赋值信息 , 该初始化只能为 成员变量 赋值一个默认值...= NULL) { strcpy_s(m_name, 5, "name"); } // 为 m_age 成员设置初始值 m_age = 0; cout << "调用构造函数" <...< endl; } 下面的代码 , 是自动调用构造函数 , 创建 实例对象 的方法 ; // 调用构造函数 Student s1; // 打印 Student s1 实例对象值 cout..." << endl; } 二、代码示例 - 三种类型构造函数定义与调用 ---- 在下面的代码中 , 分别在 Student 类中定义了 构造函数构造函数 拷贝构造函数 分别调用了上述三种类型的

    37910

    【C++】构造函数分类 ③ ( 调用构造函数的方法 | 括号法 | 等号法 )

    Student s5 = "K"; 二、完整代码示例 ---- 在下面的代码中 , 声明 Student 类时 , 定义了 : 默认构造函数构造函数 - 1 个参数 有构造函数 - 2 个参数...自动调用 默认构造函数 , 使用括号法调用 2 参数有构造函数 调用 拷贝构造函数 使用等号法调用 1 参数有构造函数 代码示例 : #include "iostream" using namespace...= NULL) { strcpy_s(m_name, 5, "name"); } // 为 m_age 成员设置初始值 m_age = 0; cout << "调用构造函数...; int main() { // 声明 Student 类型实例对象 // 调用构造函数 Student s1; // 打印 Student s1 实例对象值 cout << "name...<< " , age : " << s3.m_age << endl; // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : 调用构造函数

    21440

    【C++】构造函数意义 ( 构造函数显式调用与隐调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

    类的 实例对象时 , C++ 编译器 会自动调用 开发者定义的 构造函数 ; 2、构造函数显式调用与隐调用 类 的 构造函数 可以 自动调用 , 也可以手动调用 ; 一般 默认的 构造函数 是 自动地...隐调用 ; 有构造函数 是 由开发者 手动调用 ; 3、构造函数替代方案 - 初始化函数 构造函数的替代方案 - 初始化函数 : 共有初始化函数 : 为每个类定义一个 public 共有初始化函数..., 并且是 调用 , 操作起来比较繁琐 ; 操作遗漏 : 使用 初始化函数 对 实例对象 进行初始化操作 , 不能有遗漏 , 如果 实例对象 没有进行初始化 , 其中的成员变量值 是随机值 , 不确定..., 造成未知风险 ; 无法调用 : 在某些特殊场合 , 初始化函数是无法被调用到的 , 如 : 只定义类的变量类型 , 没有调用构造函数 , 此时会自动调用构造函数初始化实例对象 , 如果使用初始化函数...由 C++ 编译器默认提供 ; 默认构造函数 分为 2 种类型 : 默认构造函数 : 如果 类 中没有定义 构造函数 , C++ 编译器 会默认提供一个 构造函数 , 该构造函数函数体为空

    73420

    C++带参数的构造函数 | 有构造函数

    C++带参数的构造函数 在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。...C++构造函数首部的一般形式为  构造函数名(类型1 形1,类型2 形2,… ) 程序员是不能调用构造函数的,因此无法采用常规的调用函数的方法给出实参,实参是在定义对象时给出的。...案例:C++求体积,要求在类中用带参数的构造函数。...include//预处理 using namespace std;//命名空间  class Box {   public: //声明公有    Box(int,int,int);//有构造函数...以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++带参数的构造函数 | 有构造函数 更多案例可以go公众号:C语言入门到精通

    3.9K64

    Python 函数调用&定义函数&函数

    一.函数调用 在python中内置了很多函数,我们可以直接调用 。...想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3/library/functions.html 就拿abs()函数来举例...用来返回数值的绝对值 >>> abs(-5) 5 二.定义函数  我们可以通过def 来自定义函数,格式为 def  函数名(参数): 举一个定义计算两个数值相乘的函数: 1 def product...(x,y): 2 return x*y 3 print(product(3,4)) 三.函数参数 位置参数 上述的定义的函数里的参数 x,y就为位置参数 默认参数 1 def power(x,...= [1,2,3,4] 7 print(variable(*nums)) #在list或tupe的前面加一个*号,把lsit或tupe变为可变参数引入进去 在参数前加一个* 就定义为可变参数了,再调用函数时可以传入任意参数并自动组装为一个

    2.5K10

    C++函数定义 | 输出有

    C++函数的定义 函上一节小林已经讲过,从函数形式来看,函数分为函数和有函数,那么他们有什么不同呢?...定义函数的一般形式为 类型标识符 函数名([void])//注意void可以省略不写 {   声明部分   语句 } C++有函数的定义 有函数,顾名思义,有参数的函数,和函数相比,有函数多了参数...<<endl;//调用这个方法会输出我是函数  } int PrintFace(int temp)//自定义有参数函数  {   cout<<temp<<endl; //输出temp的值    cout...<<"我是有函数"<<endl; }  int main() {   PrintSpace();//调用函数    cout<<"----------------"<<endl;//分隔符    ...PrintFace(3);//调用函数    return 0;//函数返回值为0  } 执行本程序之后,会输出 我是函数 ---------------- 3 我是有函数 --------

    1.4K2927

    为什么java会默认提供构造方法

    小话题:大神勿喷 众所周知,如果一个类中没有为其定义构造方法,那么它会默认提供一个构造方法,而你定义了有构造方法以后,构造方法就没了?...//定义一个Car类public class Car { //为Car类定义一个成员变量 private int age; //并没有手动定义构造方法 public int getAge...同理,证明当我们定义有构造方法后,构造方法就消失了 //定义一个Car类public class Car { //为Car类定义一个成员变量 private int age; /.../定义有构造方法后,构造方法没了 public Car(int age) { this.age = age; } public int getAge() {...确实当我们自定义有构造方法后,构造方法不见了。 OK,上面问题都已经证明结束。

    77020

    C++ explicit禁止单参数构造函数调用

    1.单参数构造函数调用 C++中单参数构造函数是可以被隐调用的,主要有两种情形会隐调用单参数构造函数: (1)同类型对象的拷贝构造;即用相同类型的其它对象来初始化当前对象。...(2)不同类型对象的隐转换。即其它类型对象隐调用单参数拷贝构造函数初始化当前对象。比如A a=1;就是隐转换,而不是显示调用构造函数,即A a(1);。...2.单参数构造函数调用的危害 单参数构造函数调用不仅仅会给代码可读性造成影响,有时会带来意外的结果。...3.explicit禁止单参数构造函数的隐调用 在没有合适理由必须使用隐转换的前提下,为了提高代码可读性以及避免单参数构造函数的隐调用带来的潜在风险,建议使用explicit关键字阻止单参数构造函数的隐调用...int dNum; }; int main() { MyInt objMyInt = 11; //编译报错 MyInt objMyInt1 = objMyInt; //编译报错 } 当然,多形构造函数是没有构造函数的隐转换

    4.7K60

    Java构造函数调用顺序问题

    参考链接: Java构造函数 今天对Java的构造函数调用顺序进行研究,使用的是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。 ...代码如下,使用的是Java核心技术中的代码,对其进行了改造,在构造函数中加入了输出信息  public class ConstructorTest {    public static void main...   }   执行结果   object initialization block : 0  static initialization block : 1  constructors3 : 2   构造函数最后调用...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造器的主体。  最后还有一点非常重要的内容,构造调用一定要是第一句,否则编译出错。...在构造器中只能调用一次其他构造函数,不能调用两次,即无法再调用第三个构造函数。  本人是初学者,还无法从JVM的角度分析问题,同时回应各位大神对文中的错漏进行指出。

    1.1K40

    java构造函数调用另一个构造函数_java中的构造函数

    参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法  * 格式:...,连void都不写  * 3.构造方法不能return一个具体的返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载的。  ...参数列表不同  */ public class Student {     //成员变量     private String name;     private int age;     //构造方法...;     }     //有参数的构造方法     public Student(String name,int age) {         System.out.println("全构造方法执行啦

    4.5K60

    构造函数转换_构造函数实例化对象

    转载博客: http://blog.csdn.net/thefutureisour/article/details/7705771 构造函数转换 构造函数会引起一个不引人注意的问题: 用单个实参来调用构造函数定义了从从形类型到类类型的一个隐转换...,但是我们却可以这样调用这个函数: Sales_item trans1; string null_book = "9-999-99999-9"; trans1.same_isbn(null_book...); 这是因为Sales_item的构造函数可以是带单个实参的(也可以不带实参,因为我定义了默认实参7115145547),这时在调用trans1.same_isbn(null_book);时,就会发生类型转化...建立一个临时的类的对象(一旦函数调用结束,就不能再放这个对象了)。...所以对于单形构造函数,除非有非常明显的理由让他发生隐类型转换,否者我们应该把它设计为explicit,防止隐转化的发生。

    39430

    再谈ABI函数调用

    一些问题 1、调用合约函数,需要合约完整的 abi 吗? 不需要,只需要调用函数函数定义 2、调用别人的合约需要什么?...合约地址,合约函数定义,合约签名, 如果函数能识别,可以直接复制函数定义,定义空函数。 3、会不会因为语言不一样? 不会,本质上都是通过网络连接进行 rpc 调用,所以需要的东西是一样的。...通过地址调用合约函数,只需要函数签名和参数。 4、目前实现签名替换有语言有哪些?...ether.js 已经实现,放在登链集市ether.js abi 调用合约函数,关键代码 - 作品详情 - 登链社区 (learnblockchain.cn)[4] 请能用到觉得有点用的朋友支持,...(learnblockchain.cn): https://learnblockchain.cn/article/3506 [4] ether.js abi调用合约函数,关键代码 - 作品详情 -

    98010

    禁止在构造函数调用函数

    构造函数调用函数会导致程序出现莫名其妙的行为,这主要是对象还没有完全构造完成。...这是因为基类的构造函数调用一个定义在本类中的但是为派生类所重写的虚函数,程序运行的时候会调用派生类的版本,程序在运行期的类型是 A 而不是 B。...这么做主要是为了避免在构造函数调用抽象类中的方法,防止抛出异常。虽然这么写可以避免这个问题但是还存在一个很大的缺陷,它会造成 str 这个对象在整个生命周期中无法保持恒定的值。...在构造函数还没有把该对象初始化完成之前,它的取值是由初始化语句决定的,但是执行完构造函数之后它的值却变成了构造函数中所设定的那个值。...Tip:C# 对象的运行期类型是一开始就定好的,即便基类是抽象类也依然可以调用其中的虚方法。 小结 在基类构造函数调用函数会导致代码严重依赖于派生类的实现,然后这些实现是无法控制且容易出错的。

    1.6K20

    Java构造函数调用顺序问题

    今天对Java的构造函数调用顺序进行研究,使用的是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。...代码如下,使用的是Java核心技术中的代码,对其进行了改造,在构造函数中加入了输出信息 public class ConstructorTest { public static void main...; } 执行结果 object initialization block : 0 static initialization block : 1 constructors3 : 2 构造函数最后调用...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造器的主体。 最后还有一点非常重要的内容,构造调用一定要是第一句,否则编译出错。...在构造器中只能调用一次其他构造函数,不能调用两次,即无法再调用第三个构造函数。 本人是初学者,还无法从JVM的角度分析问题,同时回应各位大神对文中的错漏进行指出。

    72120
    领券