类不能实例化对象?(定义的也不是抽象类)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33248019/article/details/78343729

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

这里写图片描述

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

抽象类:

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

不能实例化抽象类

02-27

有两个类,一个PrinterMonitor抽象类,一个MyPrinterMonitor具体类。在实例化的时候,告诉我不能实例化抽象类。现在正在学设计模式,如果C++不能实例化抽象类那要怎么实现所期望的功能呢?rn我找了一些资料,里面的代码也是这么写的,但我的编译为什么出错?rn代码如下:rnrn//PrinterMonitor.h文件rn#include "Printer.h"rn#include"ChargeFormStrategy.h"rn#include"Filter.h"rn#include"Printer.h"rn/**rn * 打印机监视器抽象类rn */rnclass PrinterMonitorrnrnrnpublic:rn ~PrinterMonitor();rn virtual void startMonitor() =0;rn rn virtual void monitor() =0;rn virtual Printer getPrinter() =0;rnprotected:rn PrinterMonitor();rnprivate:rnrn Printer printer;rn ChargeFormStrategy chargeFormStrategy;rnrn Filter filter;rnrn;rn#endifrnrnrn//MyPrinterMonitor.h文件rnrn///////////////////////////////////////////////////////////rn// MyPrinterMonitor.hrn// Implementation of the Class MyPrinterMonitorrn// Created on: 20-二月-2014 15:36:11rn// Original author: Administratorrn///////////////////////////////////////////////////////////rnrn#if !defined(EA_B1612F76_2F98_4fa4_A5C6_B3B703B4379C__INCLUDED_)rn#define EA_B1612F76_2F98_4fa4_A5C6_B3B703B4379C__INCLUDED_rnrn#include "PrinterMonitor.h"rnrnclass MyPrinterMonitor : public PrinterMonitorrnrnrnpublic:rn virtual ~MyPrinterMonitor();rnrn MyPrinterMonitor();rn void startMonitor();rnprivate:rnrn void monitor();;rn#endif rnrn//测试rnint main()rn PrinterMonitor* myPtMonitor;rnrnrn //此报错:error C2259: “MyPrinterMonitor”: 不能实例化抽象类rn myPtMonitor= new MyPrinterMonitor();rn rnrnreturn 0;rnrn 论坛

不能实例化抽象类c++问题

05-25

#ifndef QUERYn#define QUERYn#include "TextQuery.h"nclass Query_basenn friend class Query;nprotected:n typedef TextQuery::line_no line_no;n virtual ~Query_base()nprivate:n virtual set eval(const TextQuery&)const=0;n virtual ostream& display(ostream& =cout)const=0;n;nclass Querynnprivate:n friend Query operator~(const Query &);n friend Query operator&(const Query &,const Query&);n friend Query operator|(const Query &,const Query&);n Query_base *q;n size_t *use;n void decr_use()n n if(--*use==0)n delete q;delete use;n n Query(Query_base* query):q(query),use(new size_t(1))npublic:n Query(const string &);n Query(const Query &rhs)n n n q=rhs.q;n use=rhs.use;n ++*use;n n Query& operator=(const Query& rhs)n n decr_use();n q=rhs.q;n use=rhs.use;n ++*use;n return *this;n n ~Query()n n decr_use();n n set eval(const TextQuery &t)constn n return q->eval(t);n n ostream& display(ostream &os)constn n return q->display(os);n n;nostream& operator<<(ostream &os,const Query& query)nn return query.display(os);nnclass WordQuery:public Query_basennprivate:n friend class Query;n WordQuery(const string &s):query_word(s)n string query_word;n ostream& display(ostream &os)constn n return os< eval(const TextQuery &t)constn n return t.run_query(query_word);n n;nQuery::Query(const string &s)nn q=new WordQuery(s);n use=new size_t(1);nnclass NotQuery:public Query_basennprivate:n friend Query operator~(const Query &);n Query query;n set eval(const TextQuery &file)constn n set has_val=query.eval(file);n set ret_line;n for(line_no i=0;i!=file.size();i++)n if(has_val.find(i)==has_val.end())n ret_line.insert(i);n return ret_line;n nn NotQuery(Query q):query(q)n ostream& display(ostream &os)constn n return os<<"~("< eval(const TextQuery& file)const;n;nset AndQuery::eval(const TextQuery& file)constn n set right=rhs.eval(file);n set left=lhs.eval(file);n set ret_lines;n set::const_iterator iter=right.begin();n for(;iter!=right.end();++iter)n if(left.find(*iter)!=left.end())n ret_lines.insert(*iter);n return ret_lines;n nQuery operator&(const Query &lhs,const Query &rhs)nn return new AndQuery(lhs,rhs);nnclass OrQuery: public BinaryQuerynn friend Query operator|(const Query&,const Query &);n OrQuery(Query left,Query right):BinaryQuery(left,right,"|") n n set eval(const TextQuery& file)constn n set right=rhs.eval(file);n set left=lhs.eval(file);nn set::const_iterator iter=right.begin();n for(;iter!=right.end();++iter)n left.insert(*iter);n return left;n nn;nQuery operator|(const Query &lhs,const Query &rhs)nn return new OrQuery(lhs,rhs);nnnn#endifnn```n n```n提示错误 1 error C2259: “AndQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 155 1 New_querynn错误 2 error C2259: “OrQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 159 1 New_querynn跟答案一样,为什么我这个提示错误?n 问答

没有更多推荐了,返回首页