抽象类指针

抽象类是为了抽象和设计的目的而建立的,处于继承层次结构的上层。

具体类是能够建立对象的类。

抽象类的规定

(1)抽象类只能用作其他类的基类,不能建立抽象类对象。

(2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。

(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

#include<iostream>
using namespace std;

const double PI=3.14159;

class Shapes   //抽象类
{
protected:
    int x, y;
public:
    void setvalue(int d, int w=0){x=d;y=w;}
    virtual void disp()=0;//纯虚函数
};

class Square:public Shapes
{
public:
    void disp(){
        cout<<"矩形面积:"<<x*y<<endl;
    }
};

class Circle:public Shapes{
public:
    void disp(){
        cout<<"圆面积:"<<PI*x*x<<endl;
    }
};

int main()
{
    Shapes *ptr[2]; //定义对象指针数组
    Square s1;
    Circle c1;
    ptr[0] = &s1;
    ptr[0]->setvalue(10, 5);
    ptr[0]->disp();
    ptr[1] = &c1;
    ptr[1]->setvalue(10);
    ptr[1]->disp();
    return 0;

}
时间: 2024-10-13 15:57:48

抽象类指针的相关文章

【C/C++学院】0823-静态联合编译与动态联合编译/父类指针子类指针释放/虚函数/纯虚函数概念以及虚析构函数/抽象类与纯虚函数以及应用/虚函数原理/虚函数分层以及异质链表/类模板的概念以及应用

静态联合编译与动态联合编译 #include <iostream> #include <stdlib.h> //散列 void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void main() { ///auto p = go;编译的阶段,静态联编 void(*p1)(char *s

纯虚函数_抽象类

解耦合 和 模块的划分 c++没有接口的概念  但可以使用纯虚函数(抽象类)实现接口的功能 纯虚函数和抽象类纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本纯虚函数为各派生类提供一个公共界面(接口的封装和设计,软件的模块功能更划分) 纯虚函数说明形式: virtual 类型 函数名(参数表)= 0: 含有纯虚函数的基类 称为抽象类. class shape { point center; public: virtual void rotate(int)=0;

15.6纯虚函数与抽象类

纯虚函数:virtual 1.问题的产生: 通过基类的指针删除派生类对象时只调用基类的析构函数 例: class CSon{ public: ~CSon() {   }; }; class CGrandson : CSon{ public: ~CGrandson() {   }; } int main(){ CSon *p = new CGrandson;       delete p;       return 0; } 2. 解决办法: 把基类的析构函数声明为virtual,派生类的析构函数

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

C++中继承与抽象类

继承语法格式如下: class 子类名称 : 继承方式(public private protected 三种) 父类名称 纯虚函数格式: virtual 返回值类型 函数名(参数列表)= 0:含有纯虚函数的类称为抽象类,抽象类不能进行实例,抽象类指针对象可以指向子类 int main(){ /* Animal *A; Dog dog; Cat cat; A = &dog; A->run(); A = &cat; A->run(); system("pause&quo

C++ 面试题

<<<<<<<<<<<<<<<< 一.选择题 1.下面各项不属于派生新类范畴的是( ) A.吸收基类的成员 B.改造基类的成员 C.删除基类的成员 D.添加新成员 2.在派生新类的过程中,(  ) A.基类的所有成员都被继承 B.只有基类的构造函数不被继承 C.只有基类的析构函数不被继承 D.基类的构造函数和析构函数都不被继承 3.下面不属于类的继承方式的是(  ) A.public B.private C.o

虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

from:http://blog.csdn.net/fisher_jiang/article/details/2477577 一. 虚析构函数 我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数.因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数. 如: class Base{public:   Base(){}   virtual ~Base(){}};class Derived: public Base{public:   D

C++中的虚析构函数、纯虚析构函数详解

C++中析构函数可以为纯虚函数吗? 众所周知,在实现多态的过程中,一般将基类的析构函数设为virtual,以便在delete的时候能够多态的链式调用.那么析构函数是否可以设为纯虚呢? class CBase { public: CBase() { printf("CBase()\n"); } virtual ~CBase() = 0; // 析构函数是纯虚函数 }; 答案是可以,那么这样实现的目的是什么呢?当然是避免实例化. 但因为派生类不可能来实现基类的析构函数,所以基类析构函数虽然

企业信息系统集成框架(设计思路)C++模式

设计要求: 1.企业信息系统框架.第三方产品通过接口层进行分层. 2.企业信息系统框架如何自由的继承第三方产品:通过一个抽象类.(软件设计要求:模块要求松,接口要求紧). 设计步骤: 1.报文的接受与发送抽象类: C++与C语言设计区别:C语言中有个句柄,原因是需要分配一个结构体资源,把发送和接受的信息存储起来.而C++中由于有类的存在,可以直接将这个句柄内容存储在子类中,不需要再单独设置. 2.测试界面面向抽象类框架集成,开始初步完成测试界面. 4.厂商的产品实现(自己的头文件和.cpp文件)