c++函数的几种关系

来源:互联网 发布:软件出售 编辑:程序博客网 时间:2024/06/14 15:02
//#include"stdafx.h"#include<iostream>using namespace std;class A{};class B:public A{};//class B {};class Base {public:void foo(void) {// virtual 必须写在基类里cout << "Base::foo(void)" << endl;}virtual void bar(void) {//qux bazcout << "Base::bar(void)" << endl;}virtual void what(void) {cout << "Base::what(void)" << endl;}virtual A*fun(void) {cout << "Base::fun" << endl;return NULL;}virtual void eee(void) {cout << "Base::eee" << endl;}};class Drived:public Base {/*隐藏 父子类之间 函数名相同重载 同一作用域 函数名相同 参数列表不同 常属性重写 父子类之间 签名相同,基类为虚 多态*/public:/*virtual*/ void foo(void) {cout << "Derived::foo(void)" << endl;}void bar(int) {// 与基类的同名函数形成名字隐藏,与子类的同名形成重载cout << "Derived::bar(int)" << endl;}void bar(void)const {  // 与基类的同名函数形成名字隐藏cout << "Derived::bar const" << endl;}void bar(void) {// 与基类的同名函数形成重写cout << "Derived::bar(void)" << endl;}/*int what(void) {// 与基类中的虚函数 构成了非正常关系 不能通过 返回值不同cout << "Base::what(void)" << endl;}*/B*fun(void) {// 协变 可以重载 只限于 指针与引用类型才可以协变   返回值为基类虚函数返回值的子类cout << "Derived::fun" << endl;return NULL;}private:void eee(void) {// 一个类的私有函数有时是可以在类外调用的cout << "Derived::eee" << endl;}//决定这个函数的访控属性是由类型来决定的};void main(){Drived d;const Drived cd;Base* pb = &d;//指向子类的基类指针pb->foo();//基类无virtual 按指针的类型来调用pb->bar();//Derived::bar(void)d.bar(100);//Derived::bar(int)cd.bar();//Derived::bar constpb->fun();//Derived::fun"pb->eee();system ("pause");}

0 0
原创粉丝点击