自定义一个类,比如Cat类,该类中有一个公有成员变量:public int age=100;

问题描述

classCat{publicintage=100;}执行语句CatKitty=newCat();会为对象分配内存空间并调用默认构造函数初始化成员变量age,问题是默认构造函数会将整型成员初始化为0,那么Kitty.age的值究竟是100还是0呢?我试了一下,执行完CatKitty=newCat();后,Kitty.age的值为100.所以我猜测:如果类的成员变量在定义的时候同时赋值,那么在使用new进行类实例化时,默认构造函数对这些已经有初值的成员变量是不初始化的,只对没有初值的成员进行初始化。----------------这种猜测对吗?如果猜测不对,那又是什么机理?

解决方案

解决方案二:
classCat{publicintage;publicCat(){age=100;}}

会被解释成这样执行
解决方案三:
classCat{publicintage=100;publicCat(){age=0;}}

然后结果又等于0了
解决方案四:
classCat{publicintage=100;}编译器会编译为classCat{publicCat(){age=100;}publicintage;}而classCat{publicintage=100;publicCat(){age=0;}}编译器会编译为classCat{publicCat(){age=100;age=0;}publicintage;}
解决方案五:
默认构造函数什么都没做,编译器不会随便乱解释。至于你的那个“publicintage=100;”的定义是初始化变量定义,优先于任何构造函数的执行。就是好比我们使用一个变量前必须定义它,这个定义是最优先的动作,而这个赋值又是在定义时赋值,自然是仅次于定义执行的,至于构造函数,那个是最后才会去执行的,如果里面什么都不写,空的,那就是最后什么都不去执行而已。
解决方案六:
publicCat(){this.age=100;this.age=0;}publicCat(){this.age=100;this.age=0;}
解决方案七:
构造函数顾名思义,你要在创建类的对象的时候干什么~Cat(){你什么都没有干}那么成员本来是怎么定义就按原来的

时间: 2024-09-19 22:41:47

自定义一个类,比如Cat类,该类中有一个公有成员变量:public int age=100;的相关文章

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

xml-通过定义一个子类在XML类中自定义视图

问题描述 通过定义一个子类在XML类中自定义视图 以下是我自定义的类 <view class=""com.productions.sample.TextCustom""// more.../> 子类 public class TextCustom extends TextView { // Stuff. } 我想实现的是 public final class Custom { public class TextCustom extends TextVie

spring注入一个类与import导入该类或该类所在的包

问题描述 spring注入一个类与import导入该类或该类所在的包 RT,我通过spring在一个servelt中注入一个service类,然后通过get获得实例来使用:回想一下,当初import导入一个类,不也是如此吗?导入后通过该类实例化一个实体,然后使用, 试问有区别? 解决方案 有区别,首先,你通过SPRING是由容器控制对像实例的,而且一般都是单例的.对像实例的生存周期都由容器去控制 其次,最好不要在XML了配置bean,直接用注解,然后spring开自动扫描.以后有需要用这个bea

android开发文档中有一个关于录音的类MediaRecord

android开发文档中有一个关于录音的类MediaRecord,一张图介绍了基本的流程: 给出了一个常用的例子: [java] view plaincopy MediaRecorder recorder = new MediaRecorder();    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)

请救xml序列化对象,对象类中有一个public byte数组,怎么才能让他不被序列化

问题描述 请救xml序列化对象,对象类中有一个publicbyte数组,怎么才能让他不被序列化,按原字节输出如下<packge><id><bytes></bytes</packgebytes里放的是图片,我将图片二进制流放入进去,不想被序列化,因为客户端是c语言不能反序列化,怎么做呢. 解决方案 解决方案二:那就都不要序列化,自己按按结构写到流里面,对于流什么语言都是通用的解决方案三:引用1楼bdmh的回复: 那就都不要序列化,自己按按结构写到流里面,对于流

一个CFileFind的扩展类CFileFindExt

一.类CfileFindExt功能说明 大家经常需要对指定目录下的所有文件进行搜索或其它相同操作.若文件数很多,逐一对每个文件手工操作,很费时.本文提供一个搜索或处理指定目录下的所有文件的C++类.作者用基于层次遍历的非递归算法(以减少运行时的时间和空间开销)实现了一个 CFileFind 的扩展类 CFileFindExt,该类可以对指定目录下的所有文件进行搜索或相同的处理操作. 二.类 CFileFindExt 的接口说明及用法示例: 1.头文件.处理函数.以及类的声明: #include

自定义Hadoop的可序列化类

java原生语言中要想一个自定义类可序列化,很简单,只要让这个类实现java.io.Serializable接口就可以了,但是在Hadoop框架中,要想让自定义类可以被序列化,我们必须手动让其实现WritableCompable接口并且实现write(),readFields(),compareTo()方法. 下面就是一个我们自定义的可序列化的类: /* */ package com.charles.writable; import java.io.DataInput; import java.

探讨C++实现一个不可被继承的类

C#和Java都提供了一种机制让一个类不能被继承,如C#中的sealed关键字和Java的final关键字,然而C++程序员就没这么好命了.不过C++也可以模拟出这种效果,原理基于:子类的构造函数会自动调用父类的构造函数,同理析构函数也是一样.如果父类的构造函数和析构函数被设为私有的话,那么子类就无法调用,也就达到了父类不可被继承的目的了.原理很简单,按此原理我也实作出一个自认为很实用的工具类,在此献下丑,欢迎大家批评: template< typename TDerive, typename

介绍一个简单的JavaScript类框架

  这篇文章主要介绍了一个简单的JavaScript类框架,有助于初学者理解JS类的创建与继承,需要的朋友可以参考下 在写work-in-progress JavaScript book一书时,对于javascript继承体系,我花费了相当的时间,并在该过程中研究了各种不同的模拟经典类继承的方案.这些技术方案中,我最为推崇的是base2与Prototype的实现. 从这些方案中,应该能提炼出一个具有其思想内涵的框架,该框架须具有简单.可重用.易于理解并无依赖等特点,其中简单性与可用性是重点.以下