类的初始化(构造函数)
1. 类成员为const类型
2. 类成员为引用类型
#include <iostream> using namespace std;class A {public:A(int &v) : i(v), p(v), j(v) {}void print_val() { cout << "hello:" << i << " " << j << endl;}private:const int i;int p;int &j; };int main(int argc ,char **argv) {int pp = 45;A b(pp);b.print_val(); }
究其因
const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。
从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。
3. 类成员为没有默认构造函数的类类型
#include <iostream> using namespace std;class Base {public:Base(int a) : val(a) {}private:int val; };class A {public:A(int v) : p(v), b(v) {}void print_val() { cout << "hello:" << p << endl;}private:int p;Base b; };int main(int argc ,char **argv) {int pp = 45;A b(pp);b.print_val(); }
原因同样是创建对象时,要初始类成员的每一个成员
4. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
#include <iostream> using namespace std;class Base {public:Base(int a) : val(a) {}private:int val; };class A : public Base {public:A(int v) : p(v), Base(v) {}void print_val() { cout << "hello:" << p << endl;}private:int p; };int main(int argc ,char **argv) {int pp = 45;A b(pp);b.print_val(); }
类的初始化(构造函数)相关推荐
- 类的初始化列表_【Flutter 111】Flutter手把手教程Dart语言——类、类的的成员变量和方法、类的构造函数...
类 Dart是一种面向对象的语言,所有对象都是一个类的实例,而所有的类都继承自Object类.每个除了Object类之外的类都只有一个超类,一个类的代码可以在其它多个类继承中重复使用. 类的实例变量 ...
- c++利用初始化列表在类内部和类外部定义构造函数的区别
case 1:在类外定义构造函数,所有data member都在初始化列表中进行初始化. class SupportClass { public:SupportClass(){cout << ...
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- C++编译器会对没有构造函数的类生成默认构造函数吗?
之前在上C++的课的时候,印象中有那么一句话: 如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:"构造函数语意学&qu ...
- java web 初始化方法_Java Web(二) 类的初始化及初始化顺序
1. 问题点 最近在写单例模式的时候碰到了@Autiwired注解注入为NULL的情况,研究一番,发现是和类的初始化顺序有关.先抛出我的问题: //异步处理 public class AsyncMan ...
- move std 函数 示例_确保(值类型)可拷贝类有默认构造函数
C.43: Ensure that a copyable (value type) class has a default constructor C.43:确保(值类型)可拷贝类有默认构造函数 Re ...
- 构造方法、类的初始化块以及类字段的初始化顺序
构造方法 首先,以下代码为何无法通过编译?哪儿出错了? public class Test {public static void main(String[] args) {Foo obj1 = ne ...
- 【转】C#Static类和Static构造函数
Static类是不能实例化的, C#2.0以前为了不让一个类在外部实例化,通常都是创建一个private的构造函数,现在可以通过Static类来达到这样的目的. Static类通常用于那些只包括sta ...
- dart系列之:dart类中的构造函数
文章目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中 ...
- scala 主构造函数_在Scala中,如何在类的主构造函数中定义局部参数?
在Scala中,如何在不是数据成员的类的主构造函数中定义局部参数,例如,仅用于初始化基类中的数据成员? 例如,在下面的代码中,如何在B类的主构造函数中正确定义参数b,以便它只生成临时本地参数而不是数据 ...
最新文章
- css3的3d起步——分享
- c++如何获取文件时间_如何在Windows 10上获取文件或文件夹的所有权
- 第一部分 Calendar介绍
- 域渗透——Local Administrator Password Solution
- VB高级编程之:完全子类化模仿OFFICE2007按钮
- [RK3288][Android6.0] StageFright解码流程小结
- 利用计算机模拟专家给病人,《计算机应用基础2007》复习资料
- Requests--get( )方法
- 四位共阳极数码管显示函数_74hc573可以驱动几位共阴数码管?74hc573驱动数码管应用解析...
- 程序员应该学习的一些数学知识
- T83310 【音乐会】二重变革
- win下安装mmcv的一些报错
- 分享 | 基于图像分类网络ResNet50_vd实现桃子分类
- 爬虫——Scrapy框架案例一:手机APP抓包
- 微信公众平台开发最佳实践(第2版)
- 熊猫分发_熊猫实用指南
- 服务器系统防火墙设置在哪里设置方法,服务器怎么设置防火墙设置在哪里
- 视频号容易被限流的8个雷区,这些规则你一定要知道!
- 证监计算机类专业知识,2020国考中国证监会计算机类专业考什么?
- 连接mysql数据库报错Cannot create PoolableConnectionFactory