精华内容
下载资源
问答
  • 首先写了一个包含4个纯虚函数的抽象类list,之后派生了一个派生类seqList,里面的4个虚函数都重新定义过了,下面是代码(template说明是模板类,不用管;有的函数只是声明一下,实现就没有列出来) template ...

    今天写了一段C++代码,纯粹练习写着玩的。。。首先写了一个包含4个纯虚函数的抽象类list,之后派生了一个派生类seqList,里面的4个虚函数都重新定义过了,下面是代码(template<class elemType>说明是模板类,不用管;有的函数只是声明一下,实现就没有列出来)

    template < class elemType >
    class list{
    public:
    virtual void clear() = 0;
    virtual int length() const = 0;
    virtual void insert( int i, const elemType &x) = 0;
    virtual void remove( int i) = 0;
    };

    template < class elemType >
    class seqList: public list< elemType >{
    private:
    elemType *data;
    int currentLength;
    int maxSize;
    public:
    seqList( int initSize = 10);
    ~ seqList() { delete [] data;}
    void clear() { currentLength = 0;}
    int length() { return currentLength;}
    void insert( int i, const elemType &x);
    void remove( int i);
    };

    主函数将seqList实例化为对象intSeqList

    seqList< int> intSeqList;

    但是编译的时候仍然报错:error: cannot declare variable ‘intSeqList’ to be of abstract type ‘seqList<int>’seqList<int> intSeqList;

    就是说seqList仍然是抽象类

    这个bug搞了我好长时间。。。想着肯定是派生类里面没有完全重写抽象类里的函数,但是怎么找都是重写了啊。。。

    最终。。问题出在抽象类list中函数length()后面的const上,也就是说抽象类里的length()是常量成员函数,而派生类seqList里面length()后面没有const就说明派生类里面的length()不是常量成员函数,而编译器将其看作是不同的两个函数(虽然名字和参数类型都一样),结果。。。编译器就认为抽象类里面的常量成员函数length()没有重写。因此派生类seqList仍然是一个抽象类,就报错了。。

    下面说一下const:在C++类里面它可以声明是常量对象或者常量成员函数:常量对象则只能初始化而不能赋值,且必须初始化而别不能改变常量的值;常量成员函数则告诉编译器这个成员函数是安全的,不会改变数据成员的值,可以被常量对象所调用,常量对象只能常量成员函数,因此和其他成员函数是不同的。特别地,如果在类定义的时候说明某个函数是常量成员函数而函数定义的时候没有说明它是常量成员函数,那么编译器会把他们看作是两个不同的函数,是重载函数,因此使用的时候一定要注意这个const。


    展开全文
  • 在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;
    }

    详细定义矩形,可以实例化并正常输出

    未定义,提示含有纯虚函数无法抽象实例化对象

    展开全文
  • C++ 不能实例化抽象类

    万次阅读 2014-01-03 09:11:18
    关于C++ 不能实例化抽象类: 例: #include class Base{ public:virtual void fun()=0; } ; class Test:public Base{ public:virtual void fun(){cout;} } ; void main(){ Base a; Test *p;p=&a; } void...
    关于C++ 不能实例化抽象类:
    例:
    #include <iostream.h>
    class Base{
    public:virtual void fun()=0;
    } ;
    class Test:public Base{
    public:virtual void fun(){cout<<"Test.fun="<<endl;}
    } ;
    void main(){
    Base a;
    Test *p;p=&a;
    }
    void main(){
    Base a;//这句是错误的, 因为抽象类不能被实例化
    Test *p;p=&a;//这句也是错误的, 不能把基类的地址赋给派生类的指针。
    
    }
    应改正为
    void main(){
    Base *a;
    Test p;a=&p;
    }

    展开全文
  • 抽象类是不能被实例化的,抽象必须被继承,也就是只能实例化抽象类的子类。 但是Java中有一段有趣的功能。 比如: public abstract class MyAbstractclass {} MyAbstractclass是一个抽象类。可以在Main...

    抽象类是不能被实例化的,抽象必须被继承,也就是只能实例化抽象类的子类。

    但是Java中有一段有趣的功能。

    比如:

    public abstract class MyAbstractclass {}

    MyAbstractclass是一个抽象类。可以在Main方法中实例化这个抽象类。

    MyAbstractclass my=new  MyAbstractclass() {};

    其实这只是一个假象,而且和普通的对象实例化的写法也不同,后面带有一对{} 。

    其实这个写法是匿名内部类的用方法。 匿名类是没有有名称的类,创建时,使用new语句的一部分来声明。因此上面的代码其实声明了一个匿名类,然后这个匿名类继承了抽象类MyAbstractclass。因此{}中可以写这个类的实现细节。

    使用System.out.println(my.getClass().toString());得到这个匿名类的类型为class mytest.mytestpkg.Tj$1。

    具体可以参考:http://blog.csdn.net/liupeng900605/article/details/7723529

    展开全文
  • 提示错误 1 error C2259: “AndQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 155 1 New_query 错误 2 error C2259: “OrQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\...
  • 抽象类实例化方法

    千次阅读 2018-10-31 22:00:30
    抽象类实例化方法 抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。 ...
  • PHP抽象类无法实例化

    千次阅读 2016-08-11 16:18:04
    一、抽象类: 无法实例化 类前加 abstract, 此类就成为抽象类,无法实例化. 举例: 春秋战国时期,燕零七 飞行器专家,能工巧匠.他写了一份图纸---【飞行器制造术】 飞行器秘制图谱: 要有一个有力的发动机,...
  • 这篇文章我讲解一个编程中遇到一个错误,那就是提示”不能实例化抽象类的错误“,在输出窗口有如下的错误提示信息,如下图: 根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的...
  • 编译经典版时,别的错误都解决了,现在又出了这个啊 有知道的吗?
  • 抽象类无法直接实例化,它的实例化方式并不是通过普通的new方式来创建对象,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,因为子类在实例化之前,一定会先实例化它的父类。这样创建了继承抽象类的...
  • 大家都知道抽象类无法实例化,就无法创建对象。所以下面这篇文章主要给大家介绍了关于Java实例化一个抽象类对象的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧...
  • 错误:error C2259:“CxxDlg”:不能实例化抽象类 原因: 抽象类不能实例化,需要在派生类中实现基类所有定义的春旭函数,只要有一个纯虚函数没有定义,那么在派生类还是抽象类。仍然不能实例化
  • 不能实例化抽象类的浅尝

    万次阅读 2011-09-27 17:40:14
    今天写代码,想实现个功能,写成一个界面类,做成了CView的子类,编译无法通过,说是不能实例化抽象类,由于CView::OnDraw是抽象的。这个问题我是第一次遇到,于是网上搜了一下都不能得到满意的答案。找出C++方面的...
  • 网狐“CTableFrameSink”: 不能实例化抽象类 原因是新的接口,添加了几个虚函数,子类没有得到实现 所以不能初始化 在TableFrameSink中添加下面2个函数  //用户断线 virtual bool OnActionUserOffLine(WORD...
  • 关于抽象类无法实例化,但是可以使用"new"来实例的疑问. 背景:昨天下午回答一个实习生问的问题,大致的经过是这样的: 他问的:“为什么抽象类无法实例化,但是可以new出来一个实例,官方这么说是什么意思?而且去了各类...
  • 这是一个抽象类 package org.westos.demo7; abstract class Device { private String name; public abstract double getPrice(); public Device(){} public Device(String name){ this.n...
  • java抽象类实例化

    千次阅读 2018-10-01 15:51:53
    不过不是通过通常的 new方法来实现的,我们都知道抽象类必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子类的同时父类也必须被实例化,由此可知抽象类肯定是可以被实例化的。...
  • 今天被问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类...
  • 不能实例化抽象类 是什么原因?

    千次阅读 2011-10-13 17:21:43
    抽象类是残缺不全的类,里面的抽象方法没有具体的代码,里面的抽象方法就是被子类重写用的。一个残缺不全的类怎么可以制造出个实例呢...抽象类和接口可以想像为概念的类,不能实现,只能被继承,里面定义的是一些将要实
  • 有时候程序在VC6.0中运行是正常的,但是用VS2008打开时会出现 CException不能实例化抽象类的问题。这是由于VC6.0 与VS2008对于CException类的定义不同。 解决方案: MFC较好地将异常封装到CException类及其派生类...
  • java 接口及抽象类实例化

    千次阅读 2019-02-21 17:32:55
    我们通常被告知java的接口和抽象类都是不能被实例化的。但在实际代码中,你是否见过类似以下的奇怪代码: public static void main(String[] args) { Frame frame = new Frame("kroseing"); frame....
  • 抽象类不能进行实例化吗?

    万次阅读 2017-07-26 10:55:44
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化
  • 抽象类实例化

    千次阅读 2018-10-29 15:53:32
    抽象类不能通过new实例化,即使它所有的纯虚函数都在派生类中重写,也只能实例化子类(派生类)。 当实例化派生类时,抽象类也会跟随着实例化
  • 验证抽象类及子类实例化顺序; 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法; 验证java的多态性 实例抽象类:package com.secbro.test.abstractInit;/** * @author zhuzhisheng * @Description * ...
  • 抽象类通过子类被实例化

    千次阅读 2019-12-03 13:50:00
    抽象类其实是可以被实例化的,但是它的实例化方式并不是通过普通的new方式来创建对象,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,因为子类在实例化之前,一定会先实例化它的父类。这样创建了继承...
  • 抽象类可以实例化吗?

    万次阅读 多人点赞 2018-11-01 15:29:45
    抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象~ ...
  • 抽象类是否可以实例化讨论

    千次阅读 2018-04-14 14:59:11
    Answer:(1)、首先,抽象类是不可以实例化的,但只是不可以传统做法中的通过new来进行实例化,而是通过父类的应用来指向子类实例间接地实现父类的实例化,因为子类在实例化之前,一定会优先实例化它的父类。...
  • 大家都知道抽象类不能被实例化 例如有个抽象类A 内有一个抽象方法public abstract void test(); A a = new A();是不行的 但 A a = new A(){ public void test(){ } }; 就ok 看起来就是调用构造函数的时候顺便重写...
  • java实例化一个抽象类的对象

    千次阅读 2019-07-16 16:23:09
    不对啊,根据我的知识一个抽象类不能直接实例化一个对象出来,面向对象期末考试的卷子还有专门一道让你改错的题,一般抽象类直接实例化对象都是每年必考的错误点。那这个对象从哪实例化,国家分配的吗?先不管,结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 484,712
精华内容 193,884
关键字:

无法实例化抽象类