初始化列表

C++学习笔记 第二十课 初始化列表的使用

痞子三分冷 提交于 2020-02-22 22:58:50
学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导 初始化成员列表 1.初始化成员列表在构造函数的函数体之前 2.初始化成员列表的初始化顺序跟写代码的顺序无关,只跟成员的声明顺序有关 类中的const成员 1.类中的const成员的初始化只能在构造函数的初始化列表中进行初始化 2.类中的const成员会被分配空间 3.类中的const成员的本质是只读变量 注意 1.编译器无法直接得到const成员的初始值,因此无法进入符号表成为真正意义上的常量。 2.构造函数的函数体在执行之前,对象已经被创建好了,构造函数的函数体只不过是为了初始化对象的各种成员 示例程序: class School { private : const int ID ; const string name ; public : //执行的顺序是先给ID初始化,再给name初始化,因为ID先声明,name后声明 School ( ) : name ( "GDUT" ) , ID ( 66666 ) { } void setID ( int id ) { int & p = const_cast < int & > ( ID ) ; p = id ; } int getID ( ) const { return this - > ID ; } } ; int main ( ) { School s ;

python基础练习,循环、列表、字典、数组

北城以北 提交于 2020-02-22 18:33:47
# encoding: utf-8 ''' @author: mark @file: 20200214.py @time: 2020/2/14 14:21 @software: PyCharm ''' ''' #初始学习python print("hello word") #打印hello word price = 10 #初始化变量price rating = 4.9 #初始化变量rating name = "mark" #初始化变量name is_published = False #初始化变量is_published print(price) #打印price ''' ''' #控制台输入使用 name = input('what is your name? ') #控制台输入值赋值给name favorite_color = input("what is your favorite color ? ") #控制台输入值赋值给favorite_color print("Hi " + name + "your facorite_color " + favorite_color) #打印Hi name your facorite_color favorite_color ''' ''' #控制台输入使用 birth_year = input("Birth year: ")

Java 中的封装、继承与多态

与世无争的帅哥 提交于 2020-02-15 05:50:12
在前面的 《 Java — 面向对象的编程语言》 里,介绍了面向对象的三大特征:封装、继承、多态,主要是概念上的讲解,本篇文章将从代码出发,看看 Java 中的封装、继承与多态。 一、封装 在编程时,把数据(属性)和有关属性的一些操作(方法)绑定在一起,形成一个不可分开的集合(类),这个过程就是封装( Encapsulation )。 封装时,我们需要隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的读和写的 访问级别 。 一般情况下,我们会把所有的属性都 私有化 ,对每个属性提供 getter (读) 和 setter (写) 方法,供外界使用: public class Person { private String name ; private int age ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public int getAge ( ) { return age ; } public void setAge ( int age ) { this . age = age ; } } public class Me { public static void main ( String [ ]

C++总结(二)

ε祈祈猫儿з 提交于 2020-02-12 02:31:24
一、this指针 1、概念 :类非静态成员函数的第一个隐藏的参数,该参数使用指向调用当前函数的对象 2、特性 : this指针类型:T* const 普通类型成员函数:T* const 可以修改对象的内容,可以调用普通和const类型的成员函数 const类型成员函数:const T* const:this指向不能修改并且指向对象中的内容也不能修改,只能调用const类型的成员函数 this是非静态成员函数的第一个隐藏参数,隐藏:用户在编写函数时不用给出this的参数,该参数是编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行 this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小 静态成员函数:没有this指针 this指针的传递:一般情况exc寄存器(this_call:调用约定),也可能通过参数压栈的方式进行传递:push 对象地址(比如:类中如果包含不定参数的成员函数) 3、this指针是否可以为NULL 如果成员函数是通过对象的方式进行调用,this指针一定不会为NULL: 如果成员函数是通过类类型的指针方式进行调用,this指针可能会为NULL: 4、this指针位置:栈 类的编译过程: 1、识别类名 2、识别类中的成员 3、识别类中的成员函数,并对成员函数进行改写 二、类中六个默认的成员函数 1

JVM原理梳理

喜欢而已 提交于 2020-02-09 04:04:19
最近在研究JVM原理,整理心得以便于后续面试复习使用。 一。JVM内存模型(运行时数据区) 说明:这是JVM规定的内存模型,每个具体实现根据厂商有所不同。比如:HotPot 1.8之前有持久带(方法区的实际实现)的概念,其他如IBM J9没有这个概念, 1.程序计数器(PC) 线程执行的字节码的行号指示器,一块比较小的内存,这个指示器一行一行的读取命令进行处理。 不同线程执行的命令肯定是不一样的所以这个需要每个线程有一个。 执行本地方法(Native)时值为unifined空。 该区域是唯一不会OOM(内存溢出)的地方 2.栈 虚拟机栈是描述Java方法执行的内存模型,是动态概念。每个方法执行时会创建一个栈帧,里面存放局部变量,操作数栈,动态链表等信息。 基本数据类型都是直接存放到栈上的,对应到每个方法就是该方法的栈帧。但是,对象都放到堆上,栈里只存放对象的引用。 3.本地方法栈 上面的栈是执行Java字节码,本地方法栈执行的是本地方法,作用相同。本地方法可以使用不同语言实现,比如C++。 4.堆 内存最大的一块,所有对象都在这里创建,GC(垃圾回收的主要战场,注意不是全部)。 内存分配策略: 使用哪种一般有GC方式决定。使用分代复制方法的一般使用指针碰撞,使用标记清除方法的使用空闲列表。 指针碰撞: 内存被占用和空闲区域是规整的,指针指向临界位置

黑马程序员-java基础

半世苍凉 提交于 2020-02-07 23:40:54
---------------------- ASP.Net+Unity开发 、 .Net培训 、期待与您交流! ---------------------- 面向对象的程序设计 面向过程的程序设计方法从解决问题的每一个步骤入手,适合于解决比较小的简单问题。 面向对象的程序设计方法则按照现实世界的特点来管理复 ?的事物,把它们抽象为对 象,具有自己的状态和行为,通过对消息的反应来完成一定的任务。 特点:1:将复杂的事情简单化。 2:面向对象将以前的过程中的执行者,变成了指挥者。 3:面向对象这种思想是符合现在人们思考习惯的一种思想。 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数等一些内容进行了封装。 匿名对象使用场景: 1:当对方法只进行一次调用的时候,可以使用匿名对象。 2:当对象对成员进行多次调用时,不能使用匿名对象。必须给对象起名字。 在类中定义其实都称之为成员。成员有两种: 1:成员变量:其实对应的就是事物的属性。 2:成员函数:其实对应的就是事物的行为。 所以,其实定义类,就是在定义成员变量和成员函数。但是在定义前,必须先要对事物进行属性和行为的分析,才可以用代码来体现。 private int age;//私有的访问权限最低,只有在本类中的访问有效。 总结:开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐患,所以

Django入门日记 Day3

邮差的信 提交于 2020-02-06 09:07:37
用户注册 I. 初始化一个Django App 命令行中cd到项目文件夹,然后: >python manage . py startapp users 在 setteings.py 中注册新的应用。在 INSTALLED_APPS 列表中加入以下项: 'users.apps.UsersConfig' , 在 urls.py 中为新应用添加路径。添加如下代码: from users import views as user_views urlpatterns = [ path ( 'register/' , user_views . register , name = 'register' ) , ] II. views.py Django 的 UserCreationForm 方法中有用户注册的初始化表单布局(但不包括提交按钮),无需自定义,这里将其赋给变量 form 。 render() 方法返回渲染后的HttpResponse对象并将表单变量传入 register.html 。(在 users --> templates --> users --> 下新建一个 register.html ) from django . shortcuts import render from django . contrib . auth . forms import

c++ 变量

旧街凉风 提交于 2020-02-05 19:05:52
c/c++中的变量 c++ primer这本书对变量的定义: 变量提供一个具名的,可供程序操作的存储空间。c++中的每个变量都有其数据类型,数据类型决定着变量所占内存空间大小和布局方式,该空间可以 存储值的范围,以及变量能参与的运算。 定义(definition) 首先是 类型说明符 ,其后紧跟一个或多个 变量名(标识符)组成的列表 ,变量名之间用逗号隔开,以逗号结尾。 标识符:字母,数字,下划线组成,以字母,下划线开头 int value = 0 , i1 , i2 = 0 ; //value,i1,i2的类型均为int, // 其中value,i2的初始值为0 初始化(initialized) 当变量在创建时获得一个特定的值,变量被初始化(initialized)了。 int i = 0 ; int i = { 0 } ; int i { 0 } ; int i ( 0 ) ; //四种方式都可以实现将i初始化为0, //也有区别,在将列表初始化的时候会重点说。 需要注意的是,虽然赋值操作和初始化都是使用‘=’来操作的,但却是两个截然不同的概念,初始化不是赋值,初始化是创建变量时的操作,而赋值的含义是把对象的当前值擦除,用一个新值来代替。在c++语言中,初始化是一个复杂的问题,很多初学者都忽略了这一点,很多难以察觉的神奇bug可能就是这么出现的。 默认初始化(default

类2(构造)

こ雲淡風輕ζ 提交于 2020-02-05 05:48:35
构造函数: 每个类都定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型。除此之外类似于其他的函数,构造函数也有一个(可能为空的)参数列表和一个(可能为空的)函数体。类可以包含多个构造函数,和其他重载函数差不多,不同的构造函数之间必须在参数数量或者参数类型上有所区别(类的其他成员函数也可以重载,规则和一般函数重载一样)。 不同与其他成员函数,构造函数不能被声明成 const 的,当我们创建类的一个 const 对象时,直到构造函数完成初始化过程,对象才能真正取得其 "常量" 属性。因此,构造函数在 const 对象的构造过程中可以向其写值。 合成的默认构造函数: 如果我们没有显示地定义构造函数,那么编译器就会隐式地定义一个默认构造函数(合成的默认构造函数)。一般情况下合成的构造函数按照如下规则初始化类的数据成员: 1.如果存在类内的初始值,用它来初始化成员 2.否则,默认初始化 合成的默认构造函数只适合非常简单的类,比如上一篇博客中的 Sales_data 类。对于一般类来说是必须要定义默认构造函数的: 1

[C++] 构造函数

雨燕双飞 提交于 2020-02-04 20:24:36
构造函数 每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。 构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型;除此之外类似于其他的函数,构造函数也有一个(可能为空)参数列表和一个(可能为空的)函数体。 类可以包含多个构造函数,和其他重载函数差不多,不同的构造函数之间必须在参数数量或参数类型上有所区别。 构造函数不能被声明成const的。当我们创建类的一个const对象时,直到构造函数完成初始化过程,对象才能真正取得其“常量”属性。因此,构造函数在const对象的构造过程中可以向其写值。 合成的默认构造函数 类通过一个特殊的构造函数来控制默认初始化过程,这个函数叫做默认构造函数。默认构造函数无须任何实参。 如果我们的类没有显式地定义构造函数,那么编译器就会为我们隐式地定义一个默认构造函数,这个构造函数又被称为合成的默认构造函数。 这个合成的默认构造函数的初始化数据成员规则是: 1、如果存在类内的初始值,用它来初始化成员。 2、否则,默认初始化该成员 某些类不能依赖于合成的默认构造函数 对于一个普通的类来说,必须定义它自己的默认构造函数,原因有三: 1