第四章:类成员关系

继承:
内存空间:
子类继承父类后,成员在内存空间分布为:先父类成员后子类成员
构造析构顺序:
构造:先父后子
析构:先子后父
隐藏:
父类和子类中中同名的函数存在互为隐藏的关系,要想使用父类需要显示指定父类类名作用域。
若子类无对应的函数参数列表,则父类被隐藏
class CFather {
public:
void fun(/* CFather* const this */int a, int b) {
cout << __FUNCTION__ << " " << a << " " << b << endl;
cout << this << endl;
}
};
class CSon : public CFather {
public:
//void fun() {
// cout << __FUNCTION__ << endl;
//}
//void fun(int a) {
// cout << __FUNCTION__ << " " << a << endl;
//}
};
CSon son;
son.fun(10, 20);
CFather* const pthis = &son;
当子类函数名与父类函数名相同时,子类的函数将父类函数隐藏,不能使用父类的函数
::*是c++的整体操作符,作用是定义类成员函数指针
.* 通过对象调用类成员函数指针指向的函数
类成员函数指针:
普通的函数指针:
cout << pthis << endl;
//测试:父类指针指向子类的地址和父类中函数成员自身的this指针指向的地址相同。

::* c++ 的整体操作符,作用是定义类成员函数指针
.* 通过对象调用类成员函数指针指向的函数
类成员函数指针:
普通的函数指针:
void fun()
{
cout<<__FUNCTION__<<endl;
}
void (*p_fun)()=&fun();
(*p_fun)();
typedef void(*P_FUN)();
P_FUN p_fun1=&fun;
(*p_fun1)();
类成员函数指针:
class CTest {
public:
void fun(/* CTest * const this */) {
cout << __FUNCTION__ << endl;
}
};
void (CTest::*p_fun3) () = &CTest::fun;
(tst .* p_fun3)();
CTest* pTst = new CTest;
(pTst->*p_fun3)();
父类指针调用子类对象:
class CFather {
public:
};
class CSon : public CFather {
public:
void fun() {
cout << __FUNCTION__ << endl;
}
};
CFather* pFa = new CSon;
//pFa->fun();
//-------------------------------
void(CFather :: * p_fun)() = (void(CFather :: * )())&CSon::fun;
(pFa->*p_fun)();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙栩源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值