初始化列表

python super()

放肆的年华 提交于 2019-12-21 14:12:51
python super() 转自:http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html 一、问题的发现与提出   在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(self): print "enter A" print "leave A" class B(A): def __init__(self): print "enter B" A.__init__(self) print "leave B" >>> b = B() enter B enter A leave A leave B 即,使用非绑定的类方法(用类名来引用的方法),并在参数列表中,引入待绑定的对象(self),从而达到调用父类的目的。   这样做的缺点是,当一个子类的父类发生变化时(如类B的父类由A变为C时),必须遍历整个类定义,把所有的通过非绑定的方法的类名全部替换过来,例如代码段2, 代码段2: class B(C): # A --> C def __init__(self): print "enter B" C.__init__(self) # A --> C print "leave B"   如果代码简单

C#基础之方法和参数

蹲街弑〆低调 提交于 2019-12-19 05:24:35
接上一篇 《C#基础之类型和成员基础以及常量、字段、属性》 实例方法、静态方法 C#中的方法分为两类,一种是属于对象(类型的实例)的,称之为实例方法,另一种是属于类型的,称之为静态方法(用static关键字定义)。大家都是做开发的,这两个也没啥好说的。 唯一的建议就是:你的静态方法最好是线程安全的(这点是说起容易做起难啊……)。 构造器(构造函数) 构造器是一种特殊的方法,CLR中的构造器分为两种:一种是实例构造器;另一种是类型构造器。和其他方法不同,构造器不能被继承,所以在构造器前应用virtual/new/override/sealed和abstract是没有意义的,同时构造器也不能有返回值。 实例构造器 用来初始化类型的实例(也就是对象)的初始状态。 对于引用类型,如果我们没有显式定义实例构造器,C#编译器默认会生成一个无参实例构造器,这个构造器什么也不做,只是简单调用一下父类的无参实例构造器。这里应该意识到, 如果我们定义的类的基类没有定义无参构造器,那么我们的派生类就必须显式调用一个基类构造器 。 class MyBase { public MyBase(string name) { } } class MyClass : MyBase { } 上面的代码会报“MyBase不包含采用0个参数的构造函数”的错误,必须显式调用一个基类的构造器: class MyBase {

一、变量和基本类型

ⅰ亾dé卋堺 提交于 2019-12-18 18:55:18
1、基本内置类型 C++定义了一套包括算术类型(整型、字符、布尔型、浮点型)和空类型在内的基本数据类型。算术类型的尺寸,即所占比特数,在不同机器上有所差别。 除了布尔型和扩展的字符型之外,整型划分为带符号的和无符号的unsigned。 当在程序的某处使用了一种算术类型的值而其实所需的是另一种类型的值时,编译器会执行 类型转换 。当表达式既有带符号类型又有无符号类型,当带 符号类型取值为负时会出现异常结果,因为带符号数会自动地转换成无符号数。 一个形如42的值被称作 字面值常量 ,这样的值一望而知。都对应一种数据类型。short类型没有对应的字面值。十进制字面值的类型是int、long、long long 中尺寸最小的那个,是带符号数。如果使用u、L作后缀,可以更改字面值的类型。浮点型字面值是double类型。'a'字符char型字面值。"hello"字符串型字面值 (实际是常量字符构成的数组),编译器在每个字符串的结尾处添加一个空字符('\0'),因此,字符串字面值的实际长度要比它的内容多1。如果字符串字面值位置 紧邻且仅由空格、缩进和换行符分隔,实际上是一个整体,可以分开书写。如 std::string str("hello" "world"); 是没有问题的。 2、变量 变量 提供一个具名的、可供程序操作的存储空间。有类型,类型决定变量占用的空间、取值范围、能参与的运算

第20课 - 初始化列表的使用

风格不统一 提交于 2019-12-18 13:20:02
第20课 - 初始化列表的使用 0. 问题   类中是否可以定义 const 成员?   下面的类定义是否合法? 如果合法 , ci 的值是什么 , 存储在哪里 ? 1 class Test 2 { 3 private: 4 const int ci; 5 public: 6 int getCI() { return ci;} 7 }; 1 #include <stdio.h> 2 3 class Test 4 { 5 private: 6 const int ci; 7 public: 8 Test() 9 { 10 ci = 10; 11 } 12 int getCI() 13 { 14 return ci; 15 } 16 }; 17 18 19 int main() 20 { 21 Test t; 22 23 printf("t.ci = %d\n", t.getCI()); 24 25 return 0; 26 } 类中的const成员 在C中: const 修饰的变量必须在定义的时候进行初始化,不能在定义之后对其进行赋值操作,违背了const 的含义。 在C++中: 构造函数内部是对成员变量 进行赋值操作,而不是初始化 。初始化需要初始化列表。 1. 类成员的初始化   (1)C++ 中提供了初始化列表,可以 对成员变量进行初始化   (2)语法规则:

java8--面向对象 上(疯狂java讲义3) 复习笔记

限于喜欢 提交于 2019-12-18 09:53:45
1、初始化块总在构造器执行之前被调用 2、静态初始化块用于初始化类,在类初始化阶段被执行 3、如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类 4、一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器(比如默认的构造器将失效) 5、修饰类或者方法的修饰符,final和abstract 只能选择其一,final不可改变,abstract只能由后代实现 6、一个字节长度为8位,char类型为2个字节,char类型使用单引号括起来,如果把一个0~65535范围内的int整数赋给char类型,系统会自动把这个int类型 当成char类型来对待。 char t1=97;//可以赋予0到65535之间,输出相应字符,如果赋予65536,则报错。 System.out.println(t1);//输出 a char t2= 'a'; System.out.println(t2);//a System.out.println((int)t2);//97 char t3='你'; System.out.println(t3);//你 System.out.println((int)t3);//20320 7、构造器不能声明返回值类型(包括void),如果声明了,那么编译不会报错,但是 Java 会把这个构造器当成一个方法来处理–它就不再是一个构造器。 8

java学习(2):类和对象

空扰寡人 提交于 2019-12-18 03:19:28
一、类 类可以看成是创建对象的模板,它描述一类对象的行为和状态。创建对象也叫类的实例化。类必须先定义才能使用。 通过下面一个简单的类来理解下Java中类的定义: public class Dog { //Dog类的名字 String name; // 成员变量name int age; static int time=0; //类变量 void hungry(){ System.out.println("主人,我饿了"); } void sleeping(){ int t = 0; //局部变量 System.out.println("主人,我睡了"); } } 一个类可以包含以下类型变量: 局部变量 :在方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 成员变量 :成员变量是定义在类中、方法体之外的变量。这种变量在创建对象的时候实例化(分配内存)。成员变量可以被类中的方法和特定类的语句访问。 类变量(静态成员) :类变量也声明在类中,方法体之外,但必须声明为static类型 一个类可以拥有多个方法,方法可以表示类的行为,在上面的例子中:hungry()和sleeping()都是Dog类的方法。 构造方法 在类的实例化过程中构造方法会自动执行,它主要在实例化过程中做一些初始化的工作。 每个类都有构造方法

【c++】必须在类初始化列表中初始化的几种情况

岁酱吖の 提交于 2019-12-18 00:13:44
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)

微服务 SpringBoot 2.0(四):启动剖析之SpringApplication.run

喜你入骨 提交于 2019-12-16 21:12:40
我以为只是运行了个main方法,可却启动了服务 —— Java面试必修 引言 前一章我们讲解了启动原理的 @SpringBootApplication 部分,仔细跟着看代码还是很好理解,若需观看 @SpringBootApplication 注解部分请点击,接下来这章主要讲解run方法运行部分,run方法运行这里很枯燥乏味,所以请带好你的精气神,准备好水,因为实在是太干了。 运行启动 工具 SpringBoot版本:2.0.4 开发工具:IDEA 2018 Maven:3.3 9 JDK:1.8 我们继续看这段启动代码 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } SpringApplication.run分析 分析该方法主要分两部分,一是 SpringApplication 实例化,二是run方法的执行。 #该方法返回一个ConfigurableApplicationContext对象 SpringApplication.run(MySpringConfigurationApp.class, args);//参数1-应用入口的类

C++ Primer (一)

二次信任 提交于 2019-12-16 14:24:58
Google C++ Style Guide 书籍:C++ Primer,C++标准程序库,Effective C++,C++ concurrency in Action, Linux多线程服务端编程,The Design and Evolution of C++ C++基础: 1. 读取数量不定的输入数据 while(std::cin >> value) while内返回其左侧运算符,即std:cin, IO库定义了从istream向bool转换的规则,当istream作为条件时,效果是这个流的状态,有效输入(未遇到错误),条件为真,无效输入(读到文件尾,不是value变量类型), 条件为假 键盘输入文件结束符,unix Ctrl+D 2. C++是静态数据类型的语言,它的类型检查发生在编译时,编译器必须知道程序中每一个变量对应的数据类型 3. 避免依赖于实现环境的行为,比如不同机器上int类型的尺寸可能是不一样的 4. 切勿混用带符号类型和无符号类型,计算前带符号数会自动转换为无符号数,如果计算结果为负数会出现错误 5. 'A' 表示单独字符,"A" 表示字符数组A,编译器会在字符数组末尾添加空字符'\0' 6. 列表初始化,如果丢失精度,编译器会报错 7. 内置类型变量在函数内(包括main),如果不初始化是未初始化值,在所有函数外面,如果不初始化会采用默认初始化

初始化、赋值

旧时模样 提交于 2019-12-16 13:49:54
推荐初始化的时候就赋值(避免默认的不可预测值),推荐使用初始化列表。 int a=1; 不推荐int a; a=1; 【参考】 声明、定义、初始化与赋值 初始化和赋值的区别 来源: https://www.cnblogs.com/xixixing/p/12039054.html