c++构造函数 对象初始化

最近查看了关于c++构造函数的博客,为了防止关键知识的遗忘,特此记录一些要点,以便于今后的查阅。

如果不主动书写构造函数,c++或默认提供一般构造函数,拷贝构造函数以及复制运算符的操作。
一般的构造函数没有任何参数,默认提供的该种构造函数不执行任何操作
默认提供的拷贝构造函数简单的将成员变量赋值
默认提供的复制运算也是简单的将成员变量赋值
假设有类A,3种初始化方法在代码中表现如下
A a();  一般的构造函数(带参数的一般构造函数可以视作对a的重载)
A a(b);  拷贝构造函数
A a = c; 赋值运算
值得注意的是 如果有动态分配的类成员 那么应该重载拷贝构造函数和赋值运算符
主要是由于,默认的考培构造和=运算符都是简单的进行成员的复制,这样会导致两个对象的成员同时指向一块内存区域,两个成员粘滞在一起,改动了其中一个,另一个也会发生改变。所以必须重载这个函数以及运算符,保证每个对象的成员(动态分配)都有自己独立的空间。
关于如何对赋值运算符进行重载, 会在另一篇中记载

时间: 2024-10-11 18:22:35

c++构造函数 对象初始化的相关文章

C++ 构造函数的对象初始化列表

//构造函数的对象初始化列表 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class PointA{ public: PointA(int _x){ x = _x; } void GetX(){ printf("PointA的成员变量%d\n",x); } private: int x; }; class PointB{ public: //构造函数的初始化列表 PointB

Java 对象初始化顺序 执行顺序

先看一道Java面试题: 求这段程序的输出. 解答此题关键在于理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题: 从程序的执行顺序去解答: 1.编译:当这个类被编译通知后,会在相应的目录下生成两个.class 文件.一个是 Base.class,另外一个就是Base$Sub.class.这个时候类加载器将这两个.class  文件加载到内存 2.Base base= new Sub(): 声明父类变量base对子类的引用,JAVA类加载器将Base,Sub类加载到JVM(Java虚拟

理解隐式类型、对象初始化程序和匿名类型

在C# 3.0中,几乎每个新特性都是为LINQ服务的.所以,本文将介绍下面几个在C# 3.0中引入的新特性: 自动实现的属性 隐式类型的局部变量 对象和集合初始化程序 隐式类型的数组 匿名类型 其实这几个特性都是比较容易理解的,对于这几个特性,编译器帮我们做了更多的事情(想想匿名方法和迭代器块),从而简化我们的代码. 自动实现的属性 在C# 3.0以前,当我们定义属性的时候,一般使用下面的代码 public class Book { private int _id; private string

对象初始化优先级

初始化优先级:静态代码块>>main方法>>构造代码块>>构造函数 1 package com.itinfo; 2 3 /** 4 * 代码块的优先级 5 * http://www.cnblogs.com/goodcheap 6 * 7 * @author: Wáng Chéng Dá 8 * @create: 2017-02-26 19:12 9 */ 10 public class CodeBlock { 11 12 static { 13 System.out.p

Java父类子类的对象初始化过程

摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和static 块)  ---> 按照代码顺序依次执行. | 实例变量  及非static模块---> 按照代码顺序依次执行. | 构造函数 ---> 执行对应的构造函数. 子类的初始化过程. 父类static修饰的模块 | 子类static修饰模块 | 父类实例变量和非static块 | 父

Java对象初始化详解

出处:http://blog.jobbole.com/23939/ 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深 入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本文在最后也会对类的初始化进行介绍,相对于对象初始化来说,类的初始化要相对简单一 些). 1.Java对象何时被初始化 Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建.其中比较直观的一种,也就是通常所

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

对象初始化器与集合初初始化器

对象初始化器的结果: 对象初始化器的优点: 1.只需要一条语句就可以完成对象初始化工作. 2.无需为简单对象提供构造函数. 3.无需为初始化不同属性而为类提供多个构造函数. 集合初始化的优点: 1.集合初始化已声明的方式初始化集合,具有更好的代码可读性.

C#对象初始化器

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 对象初始化器 { class Program { static void Main(string[] args) { //第二种初始化 var s1 = new student("张三",23); Console.WriteLine(s1.ToString()); //第一种初始化 var s2