关于c++抽象类的问题,调用虚函数

问题描述

关于c++抽象类的问题,调用虚函数
#include
#include
using namespace std;
class shape
{
public:
virtual float area() const=0;
};
class circle:public shape
{
public:
circle(float r)
{
radius=r;
}
virtual float area() const
{
return 3.14159*radius*radius;
}
protected:
float radius;
};
class rectangle:public circle
{
public:
rectangle(float rfloat lfloat wfloat h):circle(r)
{
length=l;
width=w;
height=h;
}
virtual float area()
{
return length*width*height;
}
protected:
float length;
float width;
float height;
};
class triangle:public rectangle
{
public:
triangle(float rfloat lfloat wfloat hfloat a1float b1float c1):rectangle(lwhr)
{
a=a1;
b=b1;
c=c1;
}
virtual float area() const
{

    return sqrt(((a+b+c)/2)*(((a+b+c)/2)-a)*(((a+b+c)/2)-b)*(((a+b+c)/2)-c));}

protected:
float a;
float b;
float c;
};
int main()
{
circle c(2);
rectangle re(1111);
triangle t(2445345);
circle *p=&c;
cout<area()< p=&re;
coutarea()< p=&t;
coutarea()<<endl;

return 0;

}

程序可以运行 但是对象c和对象re调用的display()函数为什么是同一个 ?求大神帮助啊

解决方案

rectangle 的 area 方法缺了const所以不认为是基类的area的重写

时间: 2024-09-29 20:47:55

关于c++抽象类的问题,调用虚函数的相关文章

C++构造函数中调用虚函数

谈谈关于构造函数中调用虚函数的情况,仅讨论单继承,不考虑虚拟继承和多重继承. 测试平台:VS2013 + Win7X64 一个例子: #include <stdlib.h> #include <stdio.h> class Base { private: int __data; public: Base() { this->Func(); } public: virtual void Func() { printf("Base::Func"); } };

c++ 构造函数中调用虚函数的实现方法_C 语言

我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { public: A ():m_iVal(0){test();} virtual void func() { std::cout<<m_iVal<<' ';} void test(){func();} public: int m_iVal; }; class B : public A {

深入解析C++编程中的纯虚函数和抽象类_C 语言

C++纯虚函数详解 有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义. 纯虚函数是在声明虚函数时被"初始化"为0的函数.声明纯虚函数的一般形式是 virtual 函数类型 函数名 (参数表列) = 0; 关于纯虚函数需要注意的几点: 纯虚函数没有函数体: 最后面的"=0"并不表示函数返回值为0,它只起形式上的作用,告诉编译系统"这是纯虚函数"; 这是一个

什么是虚函数,C++虚函数讲解

虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的.通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象. 多态指同一个方法根据其所属的不同对象可以有不同的行为. 下面来看一个例子: 程序运行输出结果: 8, 12 为什么Base 对象的大小是8个字节而不是4个字节,为什么Derived 对象的大小是12个字节而不是8个字节,多出来的4个字节做什么用呢?和多态的实现有什么

[面试题]虚函数和纯虚函数

①虚函数 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有"多种形态",这是一种泛型技术.        如果调用非虚函数,则无论实际对象是什么类型,都执行基类类型所定义的函数.非虚函数总是在编译时根据调用该函数的对象,引用或指针的类型而确定.如果调用虚函数,则直到运行时才能确定调用哪个函数,运行的虚函数是引用所绑定或指针所指向的对象所属类型定义的版本. 虚函数必须是

c++ 虚函数与纯虚函数的区别(深入分析)_C 语言

在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念.因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广.比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说, 它们都是虚函数.难怪有人甚至称虚函数是C++语言的精髓. 那么,什么是虚函数呢,我们先来看看微软的解释: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本. 这个定

c++学习笔记之纯虚函数

首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数.1.简介假设我们有下面的类层次: [cpp] view plaincopy class A   {   public:       virtual void foo()       {           cout<<"

浅析C++中的虚函数_C 语言

一.定义定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数. 语法:virtual 函数返回类型函数名(参数表) { 函数体 } 用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public. 定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数. 二.作用虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函

C++虚函数及虚函数表简析_C 语言

C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有"多种形态",这是一种泛型技术.所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法.比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议. 关于虚函数的使用方法,我在这里不做过多的阐述.大家可以看看相关的C++的书籍.在这篇文章中,我只想从虚函数的实现机制上面为大家 一个