7-2 邪门歪道、推荐书籍、结束语


#include "pch.h"
#include <iostream>
#include <vector>
#include <ctime>
#include<algorithm>

using namespace std;

namespace _nmsp1
{	
	//一:不能被继承的类B
	//c++11 final关键字;
	//友元函数+虚继承   = 不能被继承的类
	//副作用:友元,破坏封装性;虚继承,消耗比较大;
	class A
	{
	private:
		A() 
		{
			int abc;
			abc = 12;
		}
		friend class B;  //我们希望类B能够成为一个不能被继承的类
	};
	//class B :public A
	class B : virtual public A
	{
	public:
		int m_b;
	};

	//我希望类B不能被继承
	class C :public B
	{
	public:
		int m_c;
	};

	void func()
	{	
		//A objba; //构造函数私有,所以生成A对象不可以

		B myobjb;
		myobjb.m_b = 15;

		/*C myobjc;
		myobjc.m_c = 20;*/




		return;
	}
}
namespace _nmsp2
{
	//二:类外调用私有虚成员函数
	class A
	{
	private :
		virtual void virfunc()
		{
			myfunc();
		}
		void myfunc()
		{
			cout << "myfunc() run---------" << endl;
		}
	};

	void func()
	{
		A obj;
		//(reinterpret_cast<void(*)()>(**(int **)(&obj)))(); //调用虚函数virfunc();
		//无非就是走虚函数表来调用虚函数,
		long *pvptr = (long *)&obj; //把对象obj的地址拿到
		long *vptr = (long *)(*pvptr); //拿到虚函数表指针
		typedef void(*Func)(void); //定义个函数指针类型
		Func f = (Func)vptr[0]; //给虚函数表指针f赋值为第一个虚函数地址virfunc
		f(); //调用虚函数

	}
}

int main()
{	
	//_nmsp1::func();		
	_nmsp2::func();

	//图形学,游戏服务器,网络通讯架构,虚拟现实,嵌入式系统,设备驱动,音频视频,ai底层。




	return 1;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值