-
2020-03-15 12:34:08
实例化:是指创建一个对象的过程
C++中类的实例化有两种方式——在栈中实例化和在堆中实例化
在栈中实例化为静态分配内存,不需要手动回收,超出内存系统报错。例如:Student a或者Student a[3],使用“.”操作符,声明即调用了构造函数(已分配了内存);
在堆中实例化为动态分配内存,需要使用delete回收。例如:Student* a = new Student()或者Student* a = new Student[3],使用“->”操作符,()相当于调用构造函数,如果存在默认的构造函数时,有时候会省略();
Student是直接访问一个对象
Student*是间接访问一个对象,因为通过了一个指针作媒介。然而什么时候用哪一种方法呢?
1.申请对象数量不确定时
2 需要空间较大时,例如:
你可以定义一个数组 BYTE pBuff[4000*1024]; 用来存放文件数据
这样如果文件很小就会浪费内存空间,文件很大则文件数据不能全部读出。所以在读文件的时候需要根据文件的size来开辟一块内存
BYTE *pBuff = new BYTE[size]使这块内存刚刚好可以存放文件数据
像这种情况就需要new 了,不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节。如果用对象,参数 传递占用的资源就太大了。3.需要用类实现多态性
这个主要是在用类的继承特性的时使用4.需要跨作用域的时候采用new的方法,只在一个函数内使用的对象采用直接访问的方法即可。
更多相关内容 -
Java如何在main方法中实例化内部类对象
2019-03-11 15:33:42今天我在实例化一个类是编译器报以下错误: No enclosing instance of type Person is accessible. Must qualify the allocation with an enclosing instance of type Person (e.g. x.new A() where x is an ...今天我在实例化一个类是编译器报以下错误:
No enclosing instance of type Person is accessible. Must qualify the allocation with an enclosing instance of type Person (e.g. x.new A() where x is an instance of Person).
后来才反应 Java中
不能直接创建实例化内部类对象
百度后得到以下结论:
1:非静态内部类,必须有一个外部类的引用才能创建。
2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。
3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。
4:静态内部类,不需要外部类引用就可以直接创建。
5:同时静态的内部类,也不能直接访问外部类的非静态方法。
6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。
看到第一个 非静态内部类,必须有一个外部类的引用才能创建。
我想到了不能直接new 于是我这样
Man man = new Person().new Man();
这样成功了
-
不能实例化抽象类&抽象类不能实例化
2020-12-02 14:19:14在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化” 如果只是想单纯的理解,那么...在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化”
如果只是想单纯的理解,那么意思就是你画了一个有四条边的图形你说是矩形
但是这是不可以的,为什么?因为矩形还有一个条件就是要四个内角是直角
其中画有四条边的图形就是抽象类,矩形就是实例化
如果理解了含义但是不懂代码中的定义,那么那么就百度百度定义!定义真的很重要!
抽象类定义:
含有纯虚函数的类称为抽象类
实例化的定义:
用类创建对象的过程
纯虚函数的定义:
一个只有函数名、参数和返回值类型,没有函数体的函数成为纯虚函数。
这一层懂了当然最好
如果不懂再来看看代码test 中shape未编译通过
#include <iostream> using namespace std; //定义一个形状抽象类(基类) class Shape { //保护继承 ,其派生类也会继承保护成员 protected: double x; double y; //公有继承 public: void set(double i, double j) { x = i; y = j; } //纯虚函数 virtual void area() = 0; }; //定义矩形类并定义其面积为长*宽(派生类) class Rectangle : public Shape { void area() { cout << x * y << endl; } }; int main() { Rectangle rec; //定义一个矩形对象(实例化) // Shape rec; Shape *p = &rec; //定义一个抽象类的指针,并使它指向矩形对象 p->set(2, 4); //调用 p->area(); return 0; }
详细定义矩形,可以实例化并正常输出
未定义,提示含有纯虚函数无法抽象实例化对象
-
String类的两种实例化方式
2021-02-05 13:11:15面试常见问题:比较String类的两种实例化方式String类的两种构实例化方式
实例化方式 产生实例化对象数 是否入字符串常量池 是否可以实现重用 直接赋值 一个 自动加入字符串常量池 可以重用 构造方法 两个 不会自动入池,可以手工入池 注入池中才可重用 说明:
- 1.使用构造方法进行实例时,JVM会开辟两块堆空间。只使用其中的一块,另外一个由于字符串常量所定义的匿名对象将成为我们的垃圾空间。
- 2 .用构造方法实例化对象时,可以使用
intern
方法手工注入常量池中,但是一定要在new的时候调用,实例化完成后再调用就没用用了。
测试:
public class Test { public static void main(String[] args) { //只会产生一个实例化对象,并且可以自动保存到对象池中,以实现该字符串实例的重用; String a="123"; String b="123"; System.out.println(a==b);//true String c=new String("134"); String d=new String("134"); System.out.println(c==d);//false String e=new String("123").intern();//调用构造方法时候手工入池 System.out.println(a==e);//true String f=new String("123"); f.intern();//此时f已完成实例化 System.out.println(a==f);//false String g=new String("145").intern(); String h="145"; System.out.println(g==h);//true } }
-
抽象类的实例化方法
2018-10-31 22:00:30抽象类的实例化方法 抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。 ... -
python类的定义与实例化
2020-11-03 22:42:48类的定义与实例化 在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义: class Person: pass 注意,在这个Person类的定义里面,... -
java中在类定义里能实例化本类的对象吗?
2015-09-24 13:23:27我在一本书上看到这个,这里的内容试讲java的构造方法私有化的 class Singleton { Singleton instance=new Singleton()...类中实例化本类的对象不会陷入死循环之中?这里书上还说这种方式在单例设计和多例设计中会用到 -
java 内部类实例化方式
2018-09-06 19:42:521、java成员和静态内部类的使用,适用类本身适用,旨在减少文件个...①java成员内部类和静态内部类的实例化方式, ②内部类的方法调用方式 代码实现如下: package com.innerClass; import com.google.gson.Gso... -
C++中类的实例化的两种方法
2018-07-29 11:45:551、首先定义一个类 class Coordinate ...2.实例化一个类的对象 void main() { Coordinate coord[3]; //栈上 coord[1].m_iX=10; //在堆中初始化一个实例 Coordinate *p=new Coordinate[3]; //堆中 ... -
类模板实例化问题
2016-12-05 15:43:03模板函数在声明的时候, 其实并不存在,函数地址也就无从谈起了,而导出到动态链接库的函数都需要有地址 (动态链接库不能将模板类导出,因为没法生成实例) 如果把模板类的声明和...原因是模板类的实例化要分成两个步 -
类不需要实例化也能直接用
2018-10-05 15:26:44在我以前的意识中,我们需要用到某个类的时候,需要先实例化这个类,实例化出一个对象,然后在使用这个类里面的方法和属性,今天偶然的机会了解到,原来有些类是不需要实例化就可以直接用的——静态(static)类,... -
java内部类的实例化
2016-11-19 13:04:52java中的内部类如何实例化?例子: public class Animal{ class Head{ } }测试如何实例化内部类: public class TestInstanceInnerClass{ public TestInstanceInnerClass(){ Animal animal = new Animal();/ -
C++中的类模板定义及实例化
2019-08-21 13:44:08文章目录一、类模板定义及实例化定义一个类模板:类模板实例化二、类模板的成员函数 一、类模板定义及实例化 定义一个类模板: template<class 模板参数表> class 类名{ // 类定义...... }; 其中... -
理解python的类实例化
2017-12-15 08:54:21英文原文来自Understanding Python Class Instantiation 从PythonWeekly邮件中看到让我们以一个Foo类开始: class Foo(object): def __init__(self, x,...当你实例化它(即创建该类的一个新的实例)时发生了什么?f = -
3.2、抽象一个类和实例化对象
2018-03-28 19:20:36一、抽象一个类 二、实例化对象 1、实例化对象 2、对象类型在内存中分配情况 三、$this 四、构造函数和析构函数 -
spring容器中类的初始化和实例化时机
2019-01-17 00:30:30说的spring容器中bean的初始化和实例化也不得不说类的加载机制。 上面的链接也很好的说了这一过程。 先抽出一部分要点: 类加载->连接(验证,准备,解析)->初始化->使用->销毁 其中类加载又... -
什么是类的实例化
2019-07-11 09:02:59类是指:描述一种事物的定义,是个抽象的概念 ...在编程时也是同样的道理,你先自己定义一个“类”,当你需要用时,用“类”的定义来创造一个具体的例子。 用类的定义来创建一个实例,就叫做类的实例化。 ... -
实例化servlet类时出错
2021-03-15 20:49:12这是我的index.html 这是我的web.xml`submitFormstudent.StudentSurveyFormSubmitsubmitForm/submitForm`还有我的servlet类package student; @WebServlet("/StudentSurveyFormSubmit") public class ... -
C# 为什么可以在一个类里声明并实例化自身类的对象
2019-05-15 18:38:51/// 这是私有的构造函数,说明只能在Atom类里实例化Atom的对象,也就是在静态构造函数中new出对象, /// 那么,其他地方要用Atom对象的话,就直接读上面那几个Atom对象就OK,别去每用一次Atom对象就new一次 /// ... -
内部类及静态内部类的实例化
2016-10-11 21:49:40内部类的实例化 如果内部类未声明为static,在实例化时首先需要new一个外部类的对象。并通过p.new Inner()的方式new 内部类,表明这个内部类指向该外部类。内部类的class类型为:Parent.Inner,而不是p.Inner,这个... -
什么是实例化,实例化、声明、初始化的区别
2020-04-26 21:40:29实例化(instantiate)是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概念类,具体到该类实物的过程。实例化过程中一般由类名 对象名 = new 类名(参数1,参数2...参数n)构成。 简介 ... -
C#——类的实例化
2018-05-04 14:26:02类:类是模子,确定对象将会拥有的特征(属性)和特征和行为(方法)类的实例化:(通过类来产生对象,就叫做类的实例化,即一个实例就是一个对象) 1.类的实例化,用关键字new 语法: 类 实例名 = new 类(); ... -
Java中子类中子类实例化父类对象
2019-05-03 18:08:39写一个父类,里面有两个方法,doing ()和talking(),并在doing ()方法中调用talking()方法。代码如下: public class Father { public void doing (){ talking(); } public void talking(){ ... -
java中类 实例化的三种方法
2018-08-01 13:49:45创建对象的方法: 1 使用公有的构造方法创建 new Person person = new person();... 实例工厂模式就是在这个类对应的包中,再新建一个工厂类,在这个类中调用new,后面想要new,直接调工厂类就行了。 -
python类是否被实例化以及引用次数
2019-02-20 17:38:45要点: 1.内置函数__str()__被重写。 def __str__(self): return Animal.species+" is "+self.name ...2.系统sys.getrefcount(cat...for obj in gc.get_objects():#判断是否有类被实例化 if isinstance(... -
类,实例,对象,生成对象,实例化对象的区别(精讲)
2018-02-07 14:45:07在面向对象程序设计中,"类"在实例化之后叫做一个"实例"(Person person = new Person())。 "类"是静态的,不占进程内存,而"实例"拥有动态内存。 实例(instance)和对象(object)的区别: 对象就是类的实例,所有的... -
python中类的创建和实例化
2018-07-27 09:24:15python中实例化类不需要使用关键字new(也没有这个关键字),类的实例化类似函数调用方式; # coding: utf-8 # 创建一个类,类名称第一个字母大写,可以带括号也可以不带括号 class Student(): student_count =... -
Python的类定义,实例化
2019-02-25 17:36:16类定义完成后,就会产生一个类对象,绑定到了标识符ClassName上 class ClassName: 语句块 举例: class MyClass: """A example class""" x = 'abc'#类属性 def foo(self):#类... -
如何实现抽象类的实例化?
2018-11-01 12:05:06正常情况下抽象类是不能实例化的,但可以模拟实例化,即 利用匿名内部类可以实现抽象类的,举例如下: 1、需要实例化 的 抽象类 代码如下: public abstract class AbstractFruit { private String name; ... -
Python类(一)-实例化一个类
2019-09-23 09:07:43#-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" class Person(): n = 123 #类变量 def __init__(self,name,money,age=33): #构造函数 ... #给实例化的类传参数 self.name = name #实例变量 ...