精华内容
下载资源
问答
  • 可以用一个抽象类定义一个指向该类的指针,但是能定义或声明对象。 这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要...

    可以用一个抽象类定义一个指向该类的指针,但是不能定义或声明对象。

    这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要生成一个类的实例的,而C++规定抽象类是不能实例化的,所以会报出如下错误:

    error C2259: 'CBase' : cannot instantiate abstract class

    >        due to following members:
    >        'int CBase::func(int)' : is abstract
    public:
     virtual int func(int param) = 0;
    private:
    };
    public:
     CTestA();
     ~CTestA();
     virtual int func(int param);
    private:
     int m_value;
    };
    {
     CBase cb0; //定义或声明一个对象,error
     CBase *cb = new CTestA(); //定义一个指针,OK
    }

     

    但是定义一个指针就不同了,指针是什么?大家都知道,无论它指向的是内部类型还是自己定义的结构体类型还是类的类型变量,它只不过就是一个具有32BIT也就是4个字节内存的空间而已,不需要其他任何信息了,所以能成功定义一个抽象类的指针变量。

     

    class CBase{

    class CTestA:public CBase{

    int _tmain(int argc, _TCHAR* argv[])

     return 0;


    展开全文
  • Java抽象类不能创建对象

    万次阅读 2017-03-06 14:35:21
    人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法, 它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这...
    比如:日历类(calendar)
    
    
    抽象类和接口都能创建对象,只是后边的new不能是new他们自己,但可以new他们的实现类(必须是类,不能是抽象类和接口),
    人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法,
    它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这个吃的方法。
    
    
    
    
    一个类继承抽象类。用抽象类的子类实例化抽象类的引用。例如
    A是抽象类  B extends A ,并且B实现了A中所有的抽象方法,就可以
    A a = new B();
    
    展开全文
  • C++没有C Sharp中的关键字abstract,但是当一个类中有一个或多个纯虚函数的时候,这个类就自动成为了抽象类,即不可以实例化。纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而...

    今天在开发过程中遇到了一个错误:不能实例化抽象类

    这个错误完全是自己疏忽大意造成的。

    首先我们知道,一个类如果是抽象类,我们就不能用这个类实例化一个对象。

    什么样的类是抽象类呢?
    C++没有C Sharp中的关键字abstract,但是当一个类中有一个或多个纯虚函数的时候,这个类就自动成为了抽象类,即不可以实例化。

    纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

    在实际开发中,很多时候你都需要继承别人的类,或是同事写的类,或是一些开源库中的类。

    也许是为了追求效率,我们很难认真阅读你要继承的基类,或者说你只关心基类中你需要的几个方法。

    这个时候,就存在错误的风险。也许父类中有一个纯虚函数你完全不关系,用不到,你就会大摇大摆的忽略它。

    但是它不会忽略你,记住:
    如果你的抽象类的派生类有任何一个纯虚函数没有实现,那么不管其他做的再多,这个类仍然是一个抽象类。

    所以用到你定义的子类实例化对象时候,会产生上述的错误。

    好在编译器能够帮助我们,以至于可以及时改正。

    所以,在继承一个类的时候,要确保实现了所有这个基类的纯虚函数。

    //基类:
    classA
    {
    public:
    A();
    virtual ~A();
    void f1();
    virtual void f2();
    virtual void f3()=0;
    };
    
    //子类:
    classB:publicA
    {
    public:
    B();
    virtual ~B();
    void f1();
    virtual void f2();
    virtual void f3();
    };
    展开全文
  • 这就让我很郁闷了,自己定义类也并非抽象类,怎么还能实例化对象了呢?抽象类:在C++中,当一个类中具有一个或多个纯虚函数的时候,这个类就是抽象类能进行实例化。 一般来说,具有纯虚函数的类,被称为抽象...

    最近在写程序遇到一个错误:不能实例化抽象类。

    这里写图片描述

    这就让我很郁闷了,自己定义类也并非抽象类,怎么还不能实例化对象了呢?

    抽象类:

    在C++中,当一个类中具有一个或多个纯虚函数的时候,这个类就是抽象类,不能进行实例化。
    

    一般来说,具有纯虚函数的类,被称为抽象基类,抽象基类是不能创建抽象类型的对象,而是该类的派生类去进行实例化

    如果抽象类的派生类有任何一个纯虚函数没有具体的实现,那么该派生类任然还是一个抽象类,即还是无法进行实例化对象

    例如:

    #include <iostream>
    //基类
    class A
    {
        public:
        A();
        virtual ~A();
        virtual void print()const=0;
        virtual viod Max()const=0;
    };
    
    //派生类
    class B:public A
    {
        public:
            B();
            virtual ~B();
            //实现了print函数
            void print()
            {
            }
    };
    
    int main()
    {
        A a;           //错误,抽象类无法进行实例化对象
        B b;           //还是错误,抽象类无法进行实例化对象
        return 0;
    }

    将抽象类中各个纯虚函数具体实现就OK了。

    #include <iostream>
    //基类
    class A
    {
        public:
        A();
        virtual ~A();
        virtual void print()const=0;
        virtual viod Max()const=0;
    };
    
    //派生类
    class B:public A
    {
        public:
            B();
            virtual ~B();
            //实现了print函数
            void print()
            {
            }
            //实现MAX函数
            void Max()
            {
            }
    };
    
    int main()
    {
        A a;           //错误,抽象类无法进行实例化对象
        B b;           //正确,可以进行实例化
        return 0;
    }
    展开全文
  • 抽象类一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象类可以没有抽象方法,只是为了让别人来实例化它; 以上两点可以说明,...总结就是:抽象类可以定义静态方法,只是抽象类自己能实例化,所...
  • 一、抽象类 定义:在普通类的基础上扩充了一些抽象方法 。 1. 抽象方法:只声明而未实现...抽象类中没有具体实现,因此抽象类不能直接实例化对象 abstract class Person{ private String name;//姓名属性 ...
  • 抽象类定义

    千次阅读 2017-05-26 15:40:25
    抽象类定义  普通类可以直接产生实例化对象,并且在普通类中可以包含构造方法、普通方法、static 方法、常量、变量的内容。而所谓抽象类就是指在普通类的结构里面增加抽象方法的组成部分,抽象方法指的是没有...
  • 接口是公开的,里面能有私有的方法或变量,是用于让别人使用的,而抽象类可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的...
  • 一、抽象类与抽象方法的定义 抽象类:只在普通类的基础上扩充了一些抽象...抽象类中包含抽象方法,抽象方法包含方法体,即抽象类中没有具体实现,所以抽象类能直接产生实例化对象 举例:创建一个简单的抽象...
  • 抽象类的用法以及定义

    万次阅读 2016-07-15 15:07:34
    与具体类比较 1.抽象类不能直接实例化 2.抽象类可以不含抽象方法 ...3.抽象类中含有抽象方法时,如果子类继承该抽象类...7.抽象类含有非抽象方法,而且子类继承该类时,重写了该方法,那么该子类的对象调用该方法时
  • 抽象类定义与使用

    万次阅读 多人点赞 2019-04-03 14:38:22
    抽象类不能直接产生实例化对象,因为抽象类是“半成品”,无法直接使用。能直接new **抽象方法:**使用abstract 关键字定义并且没有方法体的方法。抽象方法所在类一定是抽象类。 abstract class Person{ ...
  • 抽象类为什么能创建对象

    千次阅读 2020-07-10 17:24:06
    在C++中,含有纯虚拟函数的类称为抽象类,它能生成对象;在java中,含有抽象方法的类称为抽象类,同样能生成对象抽象类完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当...
  • 这种情况搞懂,创建对象成功了,是只要把抽象方法给具现化了就能创建吗? ``` abstract class Driver { public abstract void drive(); } public class Test { public static void main(String[] args) ...
  • JAVA抽象类定义

    万次阅读 多人点赞 2018-08-25 19:24:40
    所有的抽象方法都需要用abstract关键字声明,包含抽象方法的类也需要使用abstract关键字声明,抽象类和普通类相比,区别在于抽象类带有抽象方法,抽象方法可以只声明,而需要方法体。 代码演示: package demo; ...
  • 抽象类能创建对象吗?

    千次阅读 2020-07-15 00:27:20
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类抽象类能创建对象的原因: ...
  • c++中的抽象类是怎么定义

    千次阅读 2020-11-03 11:27:45
    zhi并是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法...
  • /* 抽象类和接口作为形式参数: ... //抽象类和接口虽然都能直接创建对象,但是可以通过多态进行对象的创建... */ //************抽象类作为形式参数*********** abstract class Person { publi
  • 在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“能实例化抽象类”或者“抽象类能实例化”,针对这个问题要首先理解两个内容“抽象类”和...抽象类定义: 含有纯虚函数的类称为抽象类
  •  抽象类能实例化的,即能被分配内存;而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类能有静态的抽象方法。...
  • 抽象类定义?为什么要使用抽象类?

    千次阅读 2018-07-16 20:18:15
    为什么要使用抽象类? 有什么好处? 答案:1 现实中一些父类中的方法没必要写 各个子类中的方法会有所不同 所以没必要在父类中写 2 看被人代码时候会注意这是抽象方法...5 含有抽象方法的类必须定义抽象类 ...
  • 首先,抽象类可以有构造器、静态方法,抽象类不一定要被其他类继承,可直接实例化就使用 抽象类可以有构造器、静态方法。构造器能被子类继承并完成初始化,但不会创建抽象类的实例对象。静态方法的好处是实例...
  • 用C#语言编写一段程序,满足以下要求: 1.定义抽象类Pet(宠物)类,作为基类。...4.定义包含主方法的类MainClass,通过抽象类对象调用派生类的覆写方法。 using System; using System.Collections.Generic; usin...
  • 定义抽象类的作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而需要重复类的共同特性。这样就使得程序概念层次分明,开发更...
  • Java抽象类 详解

    万次阅读 多人点赞 2016-10-05 00:06:35
    一、抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。...
  • 抽象类不能实例化,抽象类可以包含普通函数和抽象函数,抽象函数就是只有函数定义没有函数体。显然抽象函数本身也是虚拟的Virtual (只有函数定义 没有函数体实现)  类是一个模板,那么抽象类就是一个完整的...
  • 面向对象——抽象类与抽象方法

    千次阅读 2020-04-13 09:26:04
    如果一个类与具体的食物相联系,而只表达一种抽象的概念,仅是作为其派生类的一个基类,这样的类就是派生类,在抽象类中,声明抽象类中声明抽象方法是,如果加上abstract关键字则为抽象方法。abstract 修饰符可...
  • python 如何定义抽象类和抽象方法

    千次阅读 2020-01-10 13:00:05
    文章目录(一)python 如何定义抽象类和抽象方法(二)python中的多态(三)类的组合 (一)python 如何定义抽象类和抽象方法 在python中类 通过继承metaclass = ABCmeta类来创建抽象类抽象类是包含抽象方法的类,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 682,303
精华内容 272,921
关键字:

抽象类不可以定义对象