精华内容
下载资源
问答
  • C++创建类对象方法和动态对象数组

    千次阅读 2019-03-17 16:03:57
    创建类对象方法 C++中有两种创建对象方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。 C++程序的内存格局通常...

    最近在学C++,在内存管理这里遇到几个点,记录一下加深记忆。

    创建类对象的方法

    C++中有两种创建对象的方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。
    C++程序的内存格局通常分为四个区:
    1. data area(全局数据区)
    2. code area (代码区)
    3. stack area (栈区)
    4. heap area (堆区)

    其中,堆区就是“自由存储区”,我们的new就是在堆区中申请内存的。回归正题,C++的第一种类对象的创建方法,直接声明:

    #include <iostream>
    using namespace std;
    
    class Demo{
    public:
        Demo(char* str)
        {
            name = str;
            cout << this->name << " come out"  << endl;
        }
    private:
        string name;
    };
    
    int main(){
        Demo object1("object1");
    }
    
    

    这种方法创建时,会在栈区开辟内存空间,这时内存管理由C++自己处理。但是,我们的栈区是有限的,而且一般空间不大,所以new就派上用场了!
    一般来说,堆区的空间是足够大的,而在其中申请的内存空间,要由程序员自己管理。也就是说,当我们new一个变量之后,如果之后不用了,就必须手动delete,否则,就会造成内存泄漏。

    用new方法创建对象的方法如下:

    int main(){
        //Demo object1("object1");
        Demo *object2 = new Demo("object2");
        delete object2;
    }
    
    

    创建动态对象数组

    C++中,创建对象数组很简单,方法如下:

    #include <iostream>
    using namespace std;
    
    class Demo{
    public:
        Demo(){
            cout << "A Demo..." << endl; 
        }
        Demo(char* str)
        {
            name = str;
            cout << this->name << " come out"  << endl; 
        }
    private:
        string name;
    };
    
    int main(){
        Demo objs[10];
    }
    
    

    但是,如果类没有默认构造方法,上面的方法就会报错,面对没有默认构造方法的类的对象数组的构造方法如下:

    #include <iostream>
    using namespace std;
    
    class Demo{
    public:
        /* Demo(){
            cout << "A Demo..." << endl; 
        } */
        Demo(char* str)
        {
            name = str;
            cout << this->name << " come out"  << endl; 
        }
    private:
        string name;
    };
    
    int main(){
        // Demo objs[10]; // error;
        Demo *objs = new Demo[10];
        Demo **objs = new Demo *[10];
        for (int i = 0; i < 10; i++)
        {
            objs[i] = new Demo("object");
        }
    }
    
    
    展开全文
  • 对象是对的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象创建,在 Java 语言中创建对象分显式创建与隐含创建两...

    对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建隐含创建两种情况。
    显式创建对象
    对象的显式创建方式有 4 种。
    1. 使用 new 关键字创建对象
    这是常用的创建对象的方法,语法格式如下:
    类名 对象名=new 类名();
    2. 调用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法
    在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法来创建对象,代码格式如下:
    java.lang.Class Class 类对象名称=java.lang.Class.forName(要实例化的类全称);
    类名 对象名=(类名)Class类对象名称.newInstance();

    调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。
    3. 调用对象的 clone() 方法
    该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:
    类名对象名=(类名)已创建好的类对象名.clone();

    4. 调用 java.io.ObjectlnputStream 对象的 readObject() 方法
    例 1
    下面创建一个示例演示常用的前三种对象创建方法。示例代码如下:

    public class Student implements Cloneable
    {   
        //实现 Cloneable 接口
        private String Name;    //学生名字
        private int age;    //学生年龄
        public Student(String name,int age)
        {    //构造方法
            this.Name=name;
            this.age=age;
        }
        public Student()
        {
            this.Name="name";
            this.age=0;
        }
        public String toString()
        {
            return"学生名字:"+Name+",年龄:"+age;
        }
        public static void main(String[] args)throws Exception
        {
            System.out.println("---------使用 new 关键字创建对象---------");
           
            //使用new关键字创建对象
            Student student1=new Student("小刘",22);
            System.out.println(student1);
            System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");
           
            //调用 java.lang.Class 的 newInstance() 方法创建对象
            Class cl=Class.forName("Student");
            Student student2=(Student)cl.newInstance();
            System.out.println(student2);
            System.out.println("-------------------调用对象的 clone() 方法创建对象----------");
            //调用对象的 clone() 方法创建对象
            Student student3=(Student)student2.clone();
            System.out.println(student3);
        }
    }
    
    

    对上述示例的说明如下:
    使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的掏造方法。
    使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。
    使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。
    如果类没有实现 Cloneable 接口,则 clone。方法会抛出 java.lang.CloneNotSupportedException 异常,所以应该让类实现 Cloneable 接口。

    程序执行结果如下:

    ---------使用 new 关键字创建对象---------
    学生名字:小刘,年龄:22
    -----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------
    学生名字:name,年龄:0
    -------------------调用对象的done()方法创建对象----------
    学生名字:name,年龄:0
    

    隐含创建对象
    除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。
    ①String strName=“strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。
    ②字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:
    String str1=“Hello”;
    String str2=“Java”;
    String str3=str1+str2; //str3引用一个新的String对象
    ③当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。

    **提示:**类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

    无论釆用哪种方式创建对象Java 虚拟机在创建一个对象时都包含以下步骤:

    1. 给对象分配内存。
    2. 将对象的实例变量自动初始化为其变量类型的默认值。
    3. 初始化对象,给实例变量赋予正确的初始值。

    **注意:**每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。

    展开全文
  • 在C++里,有两种方法创建对象方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建
    from:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html

     

    在C++里,有两种方法创建对象:

    方法一:

    ClassName object(param);

    这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。

    注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。

    例如,我定义了一个这样的类:

    class Rec
    {
       public:
       Rec(int width,int height);
       ~Rec();
       int getArea();

       private:
       int Rwidth;
       int Rheight;
    };

    当你Rec myRec(5,5);这样创建一个myRec对象, 然后打印出sizeof(myRec);的时候,会得到 8 这个结果。

    因为myRec中有2个int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。

    这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数

    注意:该方法创建的对象调用类方法时,必须用“.”,而不能用“->”.如myRec.getArea();

    =============================================================================================

    方法二:

    ClassName *object=new ClassName(param);

    delete object;

    这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。

    注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;

    例如:Rec *rec=new Rec(3,4);

          rec->getArea();

          delete rec;

    顺便提一下:

    一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。 在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。

    另外收集了两种方法的优点:

    new出来的在堆上,直接定义的在栈上,栈的大小有限制

    new的好处:

    1、需要的时候才new(在复杂权限和业务逻辑系统中很重要)
    2、对象可靠性检查(没有栈空间的限制问题)
    3、对象的适度留用控制

    展开全文
  • 在main方法创建类对象

    千次阅读 2020-04-28 11:31:56
    根据上个练习中长方形...️创建一个长方形对象,设置其长度为5,宽度为4,输出该长方形对象的周长,再修改该长方形对象的宽度为3,输出该长方形的面积。请自定义一个,在该的main方法中实现上述要求的功能。 ...

    根据定义包含属性和方法的类
    中长方形类的定义,考虑怎样在main中创建一个长方形对象,设置其长度为5,宽度为4,输出该长方形对象的周长,再修改该长方形对象的宽度为3,输出该长方形的面积。请自定义一个类,在该类的main方法中实现上述要求的功能。

    public class Rectangle {
     double length,width;
     public double getLength() {
      return length;
     }
     public double getWidth() {
      return width;
     }
     public void setLength(double length) {
      this.length=length;
     }
     public void setWidth(double width) {
      this.width=width;
     }
     public double getArea() {
      return length*width;
     }
     public double getPerimeter() {
      return (length+width)*2;
     }
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      Rectangle re=new Rectangle();
      re.setLength(5);
      re.setWidth(4);
      System.out.println("该长方形的周长为:"+re.getPerimeter());
      re.setLength(3);
      System.out.println("该长方形的面积为:"+re.getArea());
     }
    }
    
    展开全文
  • java中创建类对象的各种方法

    千次阅读 2018-01-18 00:15:50
    最近听朋友提起面试题的时候,在加上整理复习汇总java基础知识,刚好写下来记录创建java对象方法,又称为java的实例化,有很多种,列举如下:一、使用Spring管理创建学过Spring框架的同学都知道,我们可以利用...
  • c++创建类对象3种方法

    千次阅读 2017-08-15 14:55:41
    创建对象方式注意:==是堆还是栈,创建方式== http://blog.csdn.net/azhexg/article/details/14225545 #include <iostream> using namespace std; class A { private: int n; public: A(int m):n(m) { ...
  • JS 创建自定义对象方法

    万次阅读 2020-04-22 13:46:40
    缺点:虽然解决了创建多个相似对象的问题,但是没有解决对象识别的问题(即怎么知道一个对象类型)。 构造函数模式 JS中可以创建自定义的构造函数,从而定义自定义对象属性和方法。 ♦ Person()中的代码和...
  • C++创建类对象(类的初始化)的方法

    万次阅读 多人点赞 2018-08-07 21:03:55
    本文主要介绍c++中创建类对象(类的初始化)的两种方法,即“直接使用类名创建对象”和“使用new创建对象”这两种方法。 1 概述 “直接使用类名创建对象”和“使用new创建对象”这两种创建类对象方法的区别...
  • C++创建类对象的两种方法(Qt)

    千次阅读 2020-06-09 10:35:18
    1.直接创建类对象 类名+对象名; 对象名.方法(); 注意:如果需要在一个类中使用另一个类的函数;在类的头文件中 加上 "class 待引用类名 "。 2.如果需要在类之间传递一些指针,函数之类的。 头文件: cpp文件: ...
  • Java类对象创建以及构造方法总结

    千次阅读 2017-12-12 18:33:05
    Java类对象创建以及构造方法总结
  • 有时候需要在Java的外部的一个方法创建一个内部对象,下面用一个简单的小例子来说明一种实现方法。 public class Out { public Out(){ System.out.println("外部类创建"); } class In{ public ...
  • 内部: 定义在A中的B就是内部,B...创建内部对象 方法一 先获取内部类对象再调用方法 Outer out = new Outer(); 外部类对象.new 内部构造方法 Outer.Inner in = out.new Inner(); in.play(); 方...
  • java中创建对象方法

    万次阅读 2020-02-17 22:46:52
    2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor的newInstance()实例方法。 3.调用对象的clone()方法。 4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法. ...
  • 对象方法中可以调用方法,方法中不能直接调用对象方法(除非创建一个对象) #import "Tool.h" @implementation Tool + (void)addOne:(float)add andTwo:(float)added{  NSLog(@"和是%.2f",add ...
  • javascript常用的创建对象方法

    千次阅读 热门讨论 2013-11-20 23:22:28
    一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。比如要设定网页的背景颜色,所针对的对象就是document,所用的属性名是bgcolor,如document.bgcolor="blue",就是表示使背景的颜色为蓝色。  ...
  • Java创建对象的四种方法

    千次阅读 2019-05-22 16:33:56
    使用Class的newInstance方法,newInstance方法调用无参构造器创建对象(反射),Class.forName.newInstance(); 使用clone方法 反序列化 使用构造器的两种:New关键字、反射;没有使用构造器的两种:clone、反...
  • 当一个中只有静态方法类时,可以不创建的实例,而直接使用该中的静态方法class StaticDemo { public static void A(){} public static int B(int num){} public static void C(String[] str){} }class ...
  • 文章目录反射反射概述获取Class对象的三种方法:通过Class.forName()获取class对象,它会把参数指定的加载到内存中反射class的信息class对象方法 - 01获取反射的代码示例通过反射技术访问的字段(属性方法)并...
  • java基础-反射3(反射,反射创建对象,操作对象属性,调用对象方法)前面通过学习,我们了解的运行时类型信息的基本原理,以及通过Class对象和反射来获取运行时类型信息。下面来了解通过反射来创建对象,以及操作...
  • JavaScript创建对象的4种方法

    千次阅读 2018-11-28 15:02:24
    JavaScript 创建对象的4种方法 所谓对象就是用来帮助你完成一些事情是,对象是有特征和行为的,是具体特指的某一个事物。使用对象可以使程序更加整洁 通过Object()方法创建 Object()是JavaScript内部的对象...
  • C++创建类对象的两种方法

    千次阅读 2019-12-24 10:59:19
    创建类 现有一个学生类Student,它的定义如下: class Student{ ...常见的C++创建类对象的两种方法如下: 第一种: Student stu; stu.name = “xiaoming”; stu.age = 20; stu.score = 9...
  • Java如何创建内部类对象方法

    千次阅读 2019-07-31 15:43:49
    如下,OuterClass是外部的,InnerClass是内部的, /******************************************************************************* * @project: IDS_AutoView_2019 * @package: ...
  • ”对应的类型的实例对象,众所众知,创建类对象,会调用构造方法,构造器可以有多个,默认构造方法,多参数构造方法等。 这里演示,通过反射创建默认构造方法的实例对象,和带参数的构造方法的实例对象。 案例实战...
  • python批量创建对象方法

    千次阅读 2018-11-09 21:32:21
    数据分析时,有时需要批量创建一些对象,比如DataFrame,List等,一个个手动命名是比较麻烦的。其实,可以用for循环批量创建,代码如下: import pandas as pd for i in range(10): locals()['df' + str(i)] = pd....
  • Android-构造方法-对象创建

    千次阅读 2019-02-15 13:44:57
    构造方法是一种特殊方法,...对象创建就是通过构造方法来完成的,其功能主要是完成对象的初始化 注意: 1.如果中没有编写构造方法,系统会默认该只有一个构造方法,该默认 的构造方法是无参数的,且方法体中没...
  • JS创建对象的几种方法

    千次阅读 2018-07-29 17:41:16
    自己认为目前能较好理解的创建对象方法,可能在某些方面不是最优的方法 // 1. 创建使用函数创建(工厂模式) function Person(age,name){ this.age = age || void 0; //void 0 相当于 undefined ,,自己设置好...
  • String类对象两种创建方法的区别

    千次阅读 2018-03-12 22:14:30
    一般基本数据类型存放在栈中,对象类型存放在堆中。创建String字符串的方法两种。无论哪种方法创建的字符串都是不可以改变的。先来看方法一:String a="hello";这种方法创建字符串后会有一个字符串池来...
  • 定义 声明对象 创建对象 实例化对象 属性 对象调用属性或者方法 举例,下面定义了一个并声明属性,写了一个方法: class Person { public String name; //声明属性 public int age; //声明属性 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,911,010
精华内容 1,164,404
关键字:

创建类对象的方法