运行环境:VS2017

一、对象的初始化

每一个对象都应当在它建立之时就有就有确定的内容,否则就会失去对象的意义。

class Time
{int hour = 0;int min = 0;int sec = 0;
};

这种是错误的,类并不是一个实体,并不占储存空间,显然无处容纳数据。

如果一个类是公用的,可以在定义对象时对数据成员进行初始化。

class Time
{
public:int hour;int min;int sec;
};
Time t1 = { 13,23,45 };

二、用构造函数实现对数据成员的初始化

C++提供构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其它成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

构造函数的名字必须与类名同名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。

#include <iostream>
using namespace std;
class Array
{
public:Array(){n = 100;for (int i = 0; i <= 99; i++){a[i] = i+10;}}void set_value();void show_value();
private:int a[100];int n;
};
void Array::set_value()
{cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}
}
void Array::show_value()
{for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;
}
int main()
{Array arr;arr.set_value();arr.show_value();Array ar1;ar1.show_value();return 0;
}

下面的10-109是构造函数对对象的初始化。

上面是在类内定义构造函数的,也可以只在类内对构造函数进行声明而在类外定义构造函数。

Array_sort::Array_sort()
{n = 100;for (int i = 0; i <= 99; i++){a[i] = i + 10;}
}

注意:

1、构造函数没有返回值,因此也没有类型。

2、构造函数不需要用户调用,也不能被用户调用。

3、可以用一个类对象初始化另一个类对象。

Time t1;
Time t2=t1;

4、如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。

三、带参数的构造函数

可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。

构造函数首部的一般形式为:

构造函数名(类型1 形参1,类型2 形参2 ,......)

实参是在定义对象时给出的。

类名 对象名(实参1,实参2,......)

#include<iostream>
using namespace std;
class box
{
public :box(int, int, int);int volume();
private:int height;int width;int length;
};
box::box(int h, int w, int l)
{height = h;width = w;length = l;
}
int box::volume()
{return (height*width*length);
}
int main()
{box box1(12, 25, 30);cout << "The volume of box1 is " << box1.volume()<<endl;box box2(15, 30, 21);cout << "The volume of box2 is " << box2.volume() << endl;return 0;
}

四、使用参数初始化表对参数进行初始化

这种方法不再函数体内对数据成员初始化,而是在函数首部实现。

带有参数初始化表的构造函数的一般形式如下:

类名::构造函数名([参数表])[:成员初始化表]

{

         [构造函数体]

}

方括号内为可选项(可有可无)。如果数据成员是数组,则应当在构造函数的函数体中用语句对其赋值。

box::box(int h, int w, int l) :height(h), width(w), length(l) {}

或者是在类里面:

class box
{
public :box(int h, int w, int l) :height(h), width(w), length(l) {}int volume();
private:int height;int width;int length;
};
#include<iostream>
using namespace std;
class box
{
public :box(int , int , int );int volume();
private:int height;int width;int length;
};
box::box(int h, int w, int l) :height(h), width(w), length(l) {}
int box::volume()
{return (height*width*length);
}
int main()
{box box1(12, 25, 30);cout << "The volume of box1 is " << box1.volume()<<endl;box box2(15, 30, 21);cout << "The volume of box2 is " << box2.volume() << endl;return 0;
}

五、构造函数的重载

在一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法。这些构造函数有相同的名字,但是参数的个数和类型不同。这成为构造函数的重载。

在建立对象时不必给出实参的构造函数,成为默认构造函数。显然,无参构造函数属于默认构造函数。

改变在:6-7行,14-19行

#include<iostream>
using namespace std;
class box
{
public :box();box(int h, int w, int l) :height(h), width(w), length(l) {}int volume();
private:int height;int width;int length;
};
box::box()
{height = 10;width = 10;length = 10;
}
int box::volume()
{return (height*width*length);
}
int main()
{box box1;cout << "The volume of box1 is " << box1.volume()<<endl;box box2(15, 30, 21);cout << "The volume of box2 is " << box2.volume() << endl;return 0;
}

六、使用默认参数的构造函数

构造函数中的参数的值既可以通过实参传递,也可以指定为默认的值,即如果用户不指定实参值,编译系统就使用形参去默认值。

#include<iostream>
using namespace std;
class box
{
public :box(int h=10, int w=10, int l=10);int volume();
private:int height;int width;int length;
};
box::box(int h,int w,int l)
{height = h;width = w;length = l;
}
int box::volume()
{return (height*width*length);
}
int main()
{box box1;cout << "The volume of box1 is " << box1.volume()<<endl;box box2(15);cout << "The volume of box2 is " << box2.volume() << endl;box box3(15,30);cout << "The volume of box3 is " << box3.volume() << endl;box box4(15,30,20);cout << "The volume of box4 is " << box4.volume() << endl;return 0;
}

说明:

1、在第6行的声明构造函数时,形参名可以省略

box(int =10, int =10, int =10);

2、一个类只能有一个默认构造函数,也就是说,可以不用参数而调用构造函数,一个类只能有一个。

box();
box(int =10, int =10, int =10);
//“box::box”: 对重载函数的调用不明确

3、在一个类中定义了全部是默认参数的构造函数,不能再定义重载的构造函数。

【C++】利用构造函数对类对象进行初始化相关推荐

  1. 【C++】构造函数 利用构造函数对类对象进行初始化

    7个月之后的补充: 说真的,别再收藏这篇文章了,写的真的很拉跨,建议学习并收藏C++ 六个默认成员函数 + this指针_CPP的底层是哲学的博客-CSDN博客 也是我写的,质量会好很多!!!!!! ...

  2. c++构造函数以及类中变量初始化顺序

    c++构造函数以及类中变量初始化顺序 Submitted by ant on Fri, 03/29/2013 - 20:05 构造函数 c++ 的类提供了一种抽象机制,使用起来要比 c 方便很多.为了 ...

  3. 2020.10.25 对象的创建 利用构造函数创建对象 遍历对象属性 遍历函数属性和属性数值for in 内置对象

    输出遵循变量的值就近原则 对象创建方法 : 第一种 var obj = { uname:'dengzhu',//属性的创建,多个属性创建之间用逗号隔开 sex: male; sayHi: functi ...

  4. iOS类对象的初始化+initialize

    简介 在iOS中,对象可分为类对象和实例对象,实例对象即我们平时alloc init初始化的一个具体的对象,实例对象所属的类,称为类对象.类对象.实例对象 +initialize 是一个类方法,在iO ...

  5. python 类构造函数_Python构造函数创建类对象

    python 类构造函数 In the last tutorial, we learned how to create a class, its instance and how to access ...

  6. 35 利用构造函数和原型对象实现继承

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.概述 ES6之前并没有给我们提供extends继承,我们可以通过构造函数+原型对象模拟 ...

  7. c/c++教程 - 2.4.2.1~2 对象的初始化和清理,构造函数和析构函数,构造函数的分类和调用(有参构造,无参构造,普通构造,拷贝构造,括号法,显示法,隐式转换法,匿名对象)

    目录 4.2 对象的初始化和清理 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类及调用 相关教程 4.2 对象的初始化和清理 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候 ...

  8. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  9. 【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

    文章目录 I . 主构造函数 II . 主构造函数声明属性 III . init 初始化代码块 IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI . 次构造函数 ...

最新文章

  1. 加密解密-DES算法和RSA算法
  2. “万能钥匙”可以释放大脑:脑刺激个性化医疗的新领域
  3. 用了这个 IDE 插件,5分钟解决前后端联调!
  4. 【VB测绘程序设计】第三章 VB结构化程序设计(顺序、选择、循环)
  5. linux6同步时间,centos 6.x 同步网络时间
  6. LVS负载均衡群集之NAT模型DR模型
  7. 练习:将从表读出来的时间戳除以1000(java读时间戳会多出3个000)用jackson包 实现...
  8. oracle启动crs要多久,oracle 10g CRS不能启动解决过程(hp-ux)
  9. c语言冒泡排序知识点,c语言冒泡排序
  10. pip 安装 sklearn 教程
  11. lisp医院化验系统_医院管理系统(his)电子病历 体检系统 l is pacs
  12. 资产管理之RFID资产管理系统解决方案-RFID资产智能盘点-新导智能
  13. 前端开发的workers——web workers、share workers和service workers
  14. PS 2021安装插件提示”无法加载,未经签署“怎么办?ps2021插件未经正确签署解决办法!
  15. 【机器学习】Kmeans聚类(含代码)
  16. PGM 格式图像数据操作
  17. 在JSP中连接数据库
  18. 计算机基础应用试题——第二卷
  19. 设计团旗的c语言程序设计教程课后答案,最新团知识竞赛题目及答案
  20. 中国大学MOOC-陈越、何钦铭-数据结构-2019秋期末考试

热门文章

  1. CSP 201912-1 报数 python实现
  2. Chameleon跨端框架——壹个理想主义团队的开源作品
  3. 20155222卢梓杰 实验三 免杀原理与实践
  4. ASP.net(C#)批量上传图片(完整版)
  5. Android模拟器SD卡的使用
  6. java切面类整合_SpringBoot2.x【五】整合AOP切面编程
  7. 网络流—Edmonds-Karp 最短增广路算法(最大流)
  8. kettle中三种类型: 增量不裁剪,增量裁剪,全量
  9. 2018/8/30-31 A social learning particle swarm optimization for scalable optimization.
  10. 网页失去焦点事件 visibilitychange