初始化列表

Thinking In Java 4th Chap7 复用类

不羁岁月 提交于 2019-11-29 16:13:37
复用代码的两种方法:组合和继承 组合方法:(新类中产生现有类的对象)   没什么好说的,就是调用别类的对象而已   值得一提的是一个特殊方法: toString() 当需要一个String却只有对象时能够自动调用此方法(每个类只需写一个toString方法)     例如:class Myclass{         /*..............*/         private String s;         public String toString(){           return s;} }   对象引用的初始化方法:1.定义对象之时即初始化  2.在类的构造器中初始化  3.在使用对象之前才初始化  4.实例初始化    1 class Soap { 2 public Soap() { 3 System.out.println("Soap"); 4 } 5 6 @Override 7 public String toString() { 8 return "Constructed"; 9 } 10 } 11 12 public class TestInit { 13 private String s1 = "Happy"; // 定义初始化 14 private Soap s2; 15 private String s3, s4; 16 17 //

c++类的静态成员特性

你离开我真会死。 提交于 2019-11-29 06:17:48
1、我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 2、静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。 3、如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用, 静态函数 只要使用类名加范围解析运算符 :: 就可以访问。 4、静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。 5、静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。 6、 静态成员函数与普通成员函数的区别: 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。 ps: 类中特殊成员变量的初始化问题: 常量变量:必须通过构造函数参数列表进行初始化。 引用变量:必须通过构造函数参数列表进行初始化。 普通静态变量:要在类外通过"::"初始化。 静态整型常量

1、数组初始化

时光毁灭记忆、已成空白 提交于 2019-11-29 05:44:23
1 //方法1 2 int yams[3]; 3 yams[0] = 1; 4 yams[1] = 2; 5 yams[2] = 3; 6 //方法2 7 int yams2[3] = { 1,2,3 };//若数组没有进行初始化,则其内存单元的值是不确定的, //意味着元素的值为以前驻留在该内存的值 【1】sizeof作用于数组名,得到的是整个数组的字节数 【2】只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组。 int cards[4] = { 3,6,8,10 };//允许 int hands[4]; hands[4] = { 1,2,3,4 };//不允许 hand = cards;//不允许 【3】若只对数组的一部分初始化,则编译器将其他元素设为0.若[]为空,则编译器将计算元素个数。 【4】使用列表初始化数组时,可省略等号。 【5】禁止缩窄转换。 double earnings[4]{ 1.2,2,3,4 }; long plifs[] = { 25,92,3.0 };//将float转换成long,不允许 char slifs[4] = { 'h','i',120001,'\0' }; 来源: https://www.cnblogs.com/gaoyixue/p/11457028.html

static的使用总结

依然范特西╮ 提交于 2019-11-29 00:17:56
全局静态变量 全局变量前加上关键字static,全局变量就定义成一个全局静态变量.,全局静态变量存储在静态存储区,在整个程序运行期间一直存在。全局静态变量在程序运行之前就存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态数据 在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。局部静态变量再程序执行到作用域时候,就会存在。 局部静态数据再内存中的静态存储区。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。 作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。 静态函数 在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。 函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。 warning:不要再头文件中声明static的全局函数

多重继承

吃可爱长大的小学妹 提交于 2019-11-29 00:07:50
在派生类的派生列表中可以包含多个基类: class Bear : public ZooAnimal { /* ... */ }; class Panda : public Bear, public Endangered { /* ... */ }; 每个基类包含一个可选的访问修饰符。一如往常,如果访问说明符被忽略了,则关键字class对应的默认访问说明符是private,关键字struct对应的是public。   和只有一个基类继承一样,多重继承的派生列表也只能包含已经被定义过的类,而且这些类只能是final的。对于派生类能够继承的基类个数,C++没有进行特殊的规定;但是在某个给定的派生类表中,同一个基类只能出现一次。 多重继承的派生类从每个基类中继承状态   在多重继承关系中,派生类的对象含有每个基类的子对象。 派生类构造函数初始化所有基类   构造一个派生类对象将同时构造并初始化它的所有基类子对象。与从一个基类进行派生一样,多重继承的派生类的构造函数初始值也只能初始化它的直接基类。 //显示地初始化所有基类 Panda::Panda(std::string name, bool onExhibit) : Bear(name, onExhibit, "Panda"), Endangered(Endangered::critical) {} /

java基础知识-面试(一)

徘徊边缘 提交于 2019-11-28 16:14:54
java基础知识-面试 面向对象的三大特性 1)封装 就是把同一类事物的属性和方法归到同一个类中,方便使用 防止该类的代码和数据被外部类定义的代码随意访问 要访问该类的数据和代码必须通过严格的方法控制 封装的主要功能在于我们能修改自己的实现代码,而不用修改哪些调用程序的代码片段。 优点:减少耦合,类内部自由修改,可以对类成员变量进行更精确的控制,隐藏信息、实现细节。 最佳实践: 为了实现良好的封装,通常将类的成员变量声明为private ,通过public的set和get方法完成对属性的操作 2)继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 特性: 子类拥有父类的非private属性,方法 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展 子类可以用自己的方式实现父类的方法 java的继承是单继承 关键字:extends 3)多态 封装和继承几乎都是为多态而准备的 多态是同一个行为具有多个不同表现实行或形态的能力 多态是一个接口,使用不同的实例而执行不同的操作 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 重载和重写区别 重写(Override) 重写是子类对付类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。 子类根据需要实现自己的方法 重载(Overload) 是在一个类里面,方法名字相同,而参数不同

方法见解

丶灬走出姿态 提交于 2019-11-28 16:11:43
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/manofstyle1/article/details/39156353 ———————————————— 版权声明:本文为CSDN博主「人生不再重来」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dushuyang/article/details/39156353 随笔中添加个人简介,如若错误,望提出指正.谢谢! 方法的结构 本质上,方法是一块具有名称的代码。可以使用方法的名称执行代码,也可以把数据传入方法并接收数据输出。 方法是类的函数成员。方法有两个主要部分,方法头和方法体。//或者方法名和执行体 方法头指定方法的特征,包括: 方法是否返回数据,如果返回,返回什么类型;方法的名称;什么类型的输入可以传入方法。方法体包含可执行代码的语句序列。执行从方法体的第一条语句开始,一直到整个方法结束。//在执行方法中默认为“{”开始“}”结束的,但是如果执行体中进行提前结束方法体也是可行的方案 ,比如return语句结束方法体。 方法内部的代码执行 方法体是一个块,是大括号括起的语句序列。块可以包含以下项目:

SpringBoot 2.0.3 源码解析

旧巷老猫 提交于 2019-11-28 13:00:53
前言 用SpringBoot也有很长一段时间了,一直是底层使用者,没有研究过其到底是怎么运行的,借此机会今天试着将源码读一下,在此记录。。。我这里使用的SpringBoot 版本是 2.0.3.RELEASE 源码解析   SpringApplication 的初始化   1.首先一个完整的SpringBoot项目一定会有个启动类,这里就是我们整个程序的入口; @SpringBootApplication public class TeachercommunitystudioApplication extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(TeachercommunitystudioApplication.class, args); }}   2.只有一行代码,调用了 SpringApplication的静态 run()方法, //调用重载run方法public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(new Class[]{primarySource}, args); } /

C++11最常用的新特性如下

僤鯓⒐⒋嵵緔 提交于 2019-11-28 04:58:17
1、 auto关键字 :编译器可以根据初始值自动推导出类型。但是不能用于函数传参、定义数组以及非静态成员变量。 2、 nullptr关键字 :是一种特殊类型的字面值,它可以被转换成任意其它类型的指针;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。 3、 智能指针 :C++11新增了unique_ptr、shared_ptr和weak_ptr等类型指针,用于解决内存管理的问题。 4、 初始化列表 :使用初始化列表对类进行初始化。 5、 右值引用 :基于右值引用可以实现移动语义和完美转发,消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。 6、新增STL容器array以及tuple。 来源: https://www.cnblogs.com/yichengming/p/11392553.html

C++ const 引用 指针

不羁的心 提交于 2019-11-27 18:15:40
先简单回忆一下常量的性质: int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: const int i = get_val(); //√ 运行时初始化 const int j = 42; //√ 编译时初始化 const int k; //× k未经初始化 当用一个对象去初始化另外一个对象,他们是不是const就无关紧要 int i = 42; const int ci = i; int j = ci; ci是整形常量,但ci的常量特征仅仅在执行 改变ci 的操作时才会发挥作用 const和引用 对常量的引用 ·把引用绑定到const对象上,称之为 对常量的引用 对常量的引用 不能用作修改它所绑定的对象 ,引用 及其 引用的对象 都是常量 const int ci = 1024; const int &r1 = ci; 需要注意的是: const int ci = 1024; const int &r1 = ci; r1 = 42; //× r1是对常量的引用 int &r2 = ci; //× r2是一个非常量引用,ci是一个常量对象 因为不允许把 ci 用作修改它所绑定的对象,所以也不能通过引用去改变ci(假设第四句合法,那我们就可以通过r2去改变ci了,显然是不对的)