//#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 baz
cout << "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 const
pb->fun();//Derived::fun"
pb->eee();
system ("pause");
}
c++函数的几种关系
最新推荐文章于 2024-09-03 15:28:09 发布