C++面向对象程序设计详情
程序员文章站
2022-08-11 11:40:02
C++面向对象程序设计
在C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定,即JAVA中的多态 基类通常要定义一个虚析构函数,即使该函数不执行任何实际操作,...
C++面向对象程序设计
在C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定,即JAVA中的多态 基类通常要定义一个虚析构函数,即使该函数不执行任何实际操作,也是如此。 在C++中基类的成员函数有两种:1、基类希望派生类进行重写的函数;2、基类希望派生类直接继承而不用改变的函数。对于前者,基类将其定义为虚函数。当指针或引用调用虚函数时,该调用将被动态绑定(即多态)。 任何构造函数之外的非static函数都可以是虚函数。关键字virtual只能出现在类内部的函数声明语句之前,而不能出现在类外部的函数定义语句之前。如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数。 如果成员函数没有被声明成虚函数,则其解析过程发生在编译时而非运行时。所以在继承层次中,该函数只有一个,不能被重写成多个版本。 派生类必须重新声明基类中所有的虚函数。派生类可以在这样的函数前加上关键字virtual,但并非非得这样做。 如果派生列表中基类的访问控制符为public,我们可以将派生类型的对象绑定到基类的引用或指针上。 派生类虽然有基类的数据成员,但是也只能通过基类的构造函数来初始化它们。class A { public: int a; A(int p):a(p) {} } class B : public A { public: int b; B(int p1, int p2):A(p1), b(p2) {} } //B的构造函数先由A的构造函数初始化a,然后执行A的构造函数体,接着初始化b,最后执行B的构造函数体 //派生类声明时,声明中包含类名但是不包含它的派生列表 class B : public A;//错误 class B;//正确如果某个类被当作基类,则该类必须被定义,而不能仅仅被声明。
class A; //仅仅声明了A类 class B : public A { ... } //错误,A类必须被定义从派生类向基类的类型转换只对指针或引用类型有效 基类向派生类不存在隐式的类型转换 当我们用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中基类的部分会被拷贝、移动、赋值,它的派生类部分将被忽略掉。所以得到的基类对象无法强制转换成派生类对象。
class A {} class B : public A {} B b; A a(b);//实际上,调用的是拷贝构造函数,即A::A(const A&) a = b;//实际上,调用的是拷贝赋值运算符,即A::operator=(const A&)列表内容
下一篇: 关于SQL完全卸载
推荐阅读
-
PHP面向对象程序设计之类常量用法实例,sed用法实例
-
第15设计模式:可复用的面向对象程序设计
-
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
-
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
-
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
-
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
-
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
-
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
-
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
-
面向对象设计思想的特点(简述面向对象的程序设计思想)