首页 相关文章 c++类的多态与虚函数的使用

c++类的多态与虚函数的使用

类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BASIC 6.0 是典型的非面向对象的开发语言,但是它的确是支持类,支持类并不能说明就是支持面向对象,能够解决多态问题的语言,才是真正支持面向对象的开发的语言,所以务必提醒有过其它非面向对象语言基础的读者注意!

   多态的这个概念稍微有点模糊,如果想在一开始就想用清晰用语言描述它,让读者能够明白,似乎不太现实,所以我们先看如下代码:



//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

//例程1
#include iostream
using namespace std;

class Vehicle
{
public:
Vehicle(float speed,int total)
{
Vehicle::speed=speed;...[ 查看全文 ]

2016-02-19 标签:
  • C++中的虚函数(一) 作者:aber     虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足...[ 查看全文 ]
  • C++多态技术 作者:荣耀 提交者:eastvc 发布日期:2003-12-14 19:38:12 原文出处:http://www.royaloo.com/articles/articles_2003/PolymorphismInCpp_content.htm 摘要 本文描述了C++中的各种多态性。重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用。  关键词 多态  继承  虚函数  模板  宏  函数重载 泛型编程  ...[ 查看全文 ]
  • <C++实践系列C++中的虚函数(virtual function) 作者:张笑猛 提交者:eastvc 发布日期:2003-11-22 14:46:56 原文出处:http://objects.nease.net/ 1.简介     虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次: class A { public:     virtual void foo() { cout << "A::foo() is called...[ 查看全文 ]
  • C++类对象的拷贝构造函数 作者:韩耀旭 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostreamusing namespace std;class CA{public:CA(int b){a=b;}void Show (){cout<<a<<endl;}private:int a;};int main(){CA A(10...[ 查看全文 ]
  • 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然...[ 查看全文 ]
  • 只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能。基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替。 具体表现在以下几个方面 : 派生类对象可以向基类对象赋值。 可以用子类(即公用派生类)对象对其基类对象赋值。如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对象b...[ 查看全文 ]
  • 《c++编程思想》上说一个类如果没有拷贝函数,那么编译器就会自动创建一个默认的拷贝函数。下面就让我们看一下真实的情况。 首先看一个简单的类X,这个类没有显示定义拷贝构造函数。 c++源码如下: 代码如下: class X { private:     int i;     int j; }; int main() {     X x1;//先定义对象x1     X x2 = x1;//将x1拷贝给x2 } 下面...[ 查看全文 ]
  • 在VC中使用MATLAB C/C++函数库 作者: 殷延伟 下载示例代码1 下载示例代码2 MATLAB广泛应用于线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等领域。因此如果在VC中对MATLAB进行调用将大大减少编程的工作量、保证程序的准确性,并且继承了VC++强大的功能,提高开发效率,本文将介绍了在VC中使用MATLAB函数库的具体步骤: ...[ 查看全文 ]
  • 代码如下: #includeiostream class base{ public:     base()     {         std::coutstd::endl;         std::cout"base constructor"std::endl;         func1();         std::coutstd::endl;     } ...[ 查看全文 ]
  • 在项目开发过程中,经常会使用到c++ 的url编码和解码,本文将以此问题详细介绍使用技巧,需要的朋友可以参考下 代码如下: #pragma once #include iostream #include string #include windows.h using namespace std; class strCoding { public: strCoding(void); ~strCoding(void); void UTF_8ToGB2312(string &pOut, char *pText, int pLen);//utf_8转为gb2312 void GB2312ToUTF_8(string& pOu...[ 查看全文 ]
  • c++中的源程序: 代码如下: class X { private:     int i; }; int main() {     X x; } 上面的类X没有定义构造函数,仅仅有一个int i。 下面为其汇编程序: 代码如下: ; 7    : int main() {     push    ebp;ebp为一个寄存器,总是指向一个函数调用堆栈的栈底,作为基址,用偏移量来访问该调用栈上的变量,但这里...[ 查看全文 ]
  • 在c++中,可以为函数提供默认参数,这样,在调用函数的时候,如果不提供参数,编译器将为函数提供参数的默认值。下面从汇编看其原理。 下面是c++源码: 代码如下: int add(int a = 1, int b = 2) {//参数a b有默认值     return a + b; } int main() {    int c= add();//不提供参数 } 下面是mian函数里面的汇编码: 代码如下: ; 4    : int main() { &nb...[ 查看全文 ]
  • 函数重载是用来描述同名函数具有相同或者相似功能,但数据类型或者是参数不同的函数管理操作的称呼! 我们来举一个实际应用中的例子来说明问题:我们要进行两种不同数据类型的和操作为了实现它,在c语言中我们就要写两个不同名称的涵数来进行区分例如:int testa(int a,int b)和float testb(float a,floatb),这样字是没有问题,但是总有一点不好,这么两个具备极其相似操作函数我们却起两个不同的名字,这样子不是...[ 查看全文 ]
  • c++中,如果没有为一个类提供析构函数,那么编译器会为这个类提供默认的析构的函数。由于析构函数的功能和构造函数相反,因此和默认的构造函数类似,编译器也会提供无用的默认的析构函数,和非无用的析构函数。两者的分析情况一样(对于默认的构造函数分析,请参看《从汇编看c++中默认构造函数的使用分析》)。并且编译器会提供非无用的默认析构函数情形和默认构造函数类似: 1 类含有虚成员函数(类继承自虚...[ 查看全文 ]
  • 你不应该在构造或析构期间调用虚函数,因为这样的调用不会如你想象那样工作,而且它们做的事情保证会让你很郁闷。如果你转为 Java 或 C# 程序员,也请你密切关注本文,因为在 C++ 急转弯的地方,那些语言也紧急转了一个弯。 假设你有一套模拟股票处理的类层次结构,例如,购入流程,出售流程等。对这样的处理来说可以核查是非常重要的,所以随时会创建一个 Transaction 对象,将这个创建记录在核查日志...[ 查看全文 ]
  • c++中.dll与.lib文件的生成与使用的详解 -------------------------------------------------------------------------------- 两种库: • 包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 • 包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。 共有...[ 查看全文 ]
  • 比如 一个函数 chat(link &a); chat(ling *a); 前者引入一个地址做形参 是不是可以把一个指针变量p。。 这么用chat(p); 那跟第二个函数 有什么区别呢 都是传地址啊。。 小弟弄不明白~~ chat(int&a); chat(int *a); 这两个函数是完全不同意义的东西,你的理解主要是在int&a和int* a这个类型上面。要注意int&和int*是两个完全不同的类型。int&是引用类型,而int*是指向int类型变量的指针类型。 voi...[ 查看全文 ]
  • 实现LZARI压缩算法的C++类 作者: 阙荣文(querw) 下载源代码 这是一个基于LZARI算法的数据压缩的类.Haruhiko Okumura 于1989年7月4日用c语言写实现了这个算法.但是上面用到了一些全局或静态的变量,在MFC下用起来很不方便.我把它改写成了一个c++类,使它可以方便的压缩和解压缩,更重要的是,我新增加了两个接口,这个类可以压缩/解压缩一段内存缓冲区,而不仅仅是文件. 一...[ 查看全文 ]
  • 数学库函数声明在 math.h 中,主要有: 1、abs(x) 求整型数x 的绝对值 2、cos(x) x(弧度)的余弦 3、fabs(x) 求浮点数x 的绝对值 4、ceil(x) 求不小于x 的最小整数 5、floor(x) 求不大于x 的最小整数 6、log(x) 求x 的自然对数 7、log10(x) 求x 的对数(底为10) 8、pow(x, y) 求x 的y 次方 函数说明: pow()用来计算以x为底的y次方值,即xy值,然后将结果返回。 返回值: 返回x的y次方计算结果...[ 查看全文 ]
  • Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 1、定义常量 (1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。  TYPE const ValueName = value;      const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分...[ 查看全文 ]
手机页面 收藏网站 回到头部