美文网首页
虚函数2

虚函数2

作者: 踩在浪花上00 | 来源:发表于2016-10-23 18:12 被阅读0次

#include usingnamespace std;

class Shape

{

public:

//若类中含有虚函数

//则会自动生成一张虚函数表

//该表存放的是类中虚函数的入口地址

//该类中会自动增加一个指针(虚函数表指针)

//该指针指向该虚函数表

virtual float area()

{

cout << "Shape::area()" << endl;

return 0;

}

};

#define PI 3.1415926

class Circle: public Shape

{

public:

Circle(float r): m_fR(r)

{

}

//若派生类中存在和基类虚函数A

//函数原型相同的函数B,

//则该派生类函数B默认为虚函数

//并且会使用该派生类函数B的函数地址

//覆盖掉虚函数表中原基类虚函数A的地址

float area()

{

cout << "Circle::area()" << endl;

return PI * m_fR * m_fR;

}

void info()

{

cout << "画的一首好圆" << endl;

}

private:

float m_fR;

};

class Triangle: public Shape

{

public:

Triangle(float h, float b):m_fH(h)

, m_fBottom(b){}

float area()

{

return m_fH * m_fBottom / 2;

}

private:

float m_fH;

float m_fBottom;

};

void showShapeArea(Shape &shape)

{

//对象的访问范围受限于其类型

//通过基类的指针或者引用

//来调用虚函数时

//会到虚函数表中的相应位置

//取得该虚函数的入口地址

//从而到该地址去执行函数代码

cout << shape.area() << endl;

}

int main()

{

cout << "shape:" << sizeof(Shape) << endl;

Shape shape;

Circle c(2);

Triangle t(3, 4);

showShapeArea(shape);

showShapeArea(c);

showShapeArea(t);

// Shape *pShape = &c;

//    pShape->info();  //error

#if 0

char a = '\0';

int b = 1257;

a = b;

b = a;

//派生类对象可以赋值给基类的对象

//    shape = c;

//基类的对象不能赋值给派生类对象

//c = shape;//error

Shape *pShape = &c;

Shape &refShape = c;

// Circle *pCircle = &shape; //error

// Circle &refCircle = shape; //error

#endif

cout << "Hello World!" << endl;

return 0;

}

相关文章

  • 百度C++岗暑期实习面试

    时间:2h 1.虚函数的作用2.虚函数的实现原理,虚函数表3.为什么要用虚析构函数4.new/delete比mal...

  • 3.0 C++远征:虚函数与虚析构函数实现原理

    2-7虚函数与虚析构函数实现原理 [TOC] 1.虚函数的实现原理 (1)引入概念:函数指针。 ​ 指向函数的...

  • 虚函数2

    #include usingnamespace std; class Shape { public: //若类中含...

  • C++语言-多态,纯虚函数,模版函数

    1、虚函数、纯虚函数 需要注意的是,纯虚函数子类是必须继承的,虚函数不是不必须继承的。 2、多态 在C++中默认关...

  • 抽象类和纯虚函数

    //纯虚函数 //如果父类中有了 纯虚函数 //1.子类继承父类,就必须要实现纯虚函数 //2.这个父类 就无法实...

  • C++虚函数小结

    小例子 参考 虚函数用法 虚函数 理解虚函数

  • 多态--虚函数

    1.通过对象调用成员函数(无虚函数) 源代码 反汇编代码 2. 通过对象调用成员函数(有虚函数) 对比发现通过对象...

  • 08. 纯虚函数、抽象类、多继承、菱形继承、虚

    一.虚函数 二.纯虚函数 三,虚析构函数 四.纯虚函数 五,多继承 六.多继承-虚函数 七.菱形继承 八. 虚继承...

  • C++ 虚函数

    C++ 虚函数 虚函数 基类中使用virtual关键字声明的函数,称为虚函数。虚函数的实现,通过虚函数表来实现的。...

  • 2020-12-16

    1、构造函数或者虚构函数调用虚函数肯定可以正常调用,但是没有多态特性,构造函数最早构造虚表指针,而且如果基类指针2...

网友评论

      本文标题:虚函数2

      本文链接:https://www.haomeiwen.com/subject/dtskuttx.html