cc43a_demo_c++RTTI-union-嵌套类-类成员的指针-位域-volatile

//43C++Primer_特殊工具与技术txwtech做特殊软件会用上
/*
allocator类--是一个类模板,内存分配,指定大小的内存,没有构造对象。
RTTI--运行时对象类型识别。用在不能使用虚函数时
类成员的指针
嵌套类
union--联合
局部类--一个类在函数里面,也只能函数的局部使用
位域
volatile---易失的,挥发性的(volatile int y;//告诉c++,不要对y进行优化,不要改变在内存中的位置)
extern "c",c与C++混在一起,c++调用c语言的函数,就需要extern "c"
如下:
extern "c" void show(char *);
*/

//extern "C" void show(char *);
//extern "c",c与C++混在一起,c++调用c语言的函数,就需要extern "c"
extern "C" void show(const char *);//添加一个const就可以了
//严重性    代码    说明    项目    文件    行    禁止显示状态
//错误(活动)    E0167    "const char *" 类型的实参与 "char *" 类型的形参不兼容    cc43a_demo    C : \Users\TT2018\Documents\Visual Studio 2017\Projects\cc43a_demo\cc43a_demo\cc43a_demo.cpp    78

//43C++Primer_特殊工具与技术txwtech做特殊软件会用上
/*
allocator类--是一个类模板,内存分配,指定大小的内存,没有构造对象。
RTTI--运行时对象类型识别。用在不能使用虚函数时
类成员的指针
嵌套类
union--联合
局部类--一个类在函数里面,也只能函数的局部使用
位域
volatile---易失的,挥发性的(volatile int y;//告诉c++,不要对y进行优化,不要改变在内存中的位置)
extern "c",c与C++混在一起,c++调用c语言的函数,就需要extern "c"
如下:
extern "c" void show(char *);
*/
#include <iostream>
using namespace std;
class Item_base
{
public:
	virtual double net_price(size_t n) const//虚函数
	{
		class Cat //局部类
		{

		};
		Cat cat;//局部类,也只能这里局部使用
		return n * price;
	}
	//嵌套类
	class Dog
	{

	};
public:
	std::string isbn;
protected:
	double price;
};
//派生类
class Bulk_item :public Item_base
{
public:
	double net_price(std::size_t cnt) const
	{
		if (cnt > min_qty)
			return cnt * (1 - discount)*price;
		else
			return cnt * price;
	}
private:
	std::size_t min_qty;
	double discount;
};
union TokenValue //就是一个类
{
	//三个数据是重叠打包在一起的,以数据里面最大的字节作用存储.三个实际是同一个
	char cval;
	int ival;
	double dval; //dobule 8个字节,第一个给cval,4个字节给ival

};
//位域,用无符号整形来做
typedef unsigned int Bit; //
class File //位域类
{
public:
	Bit mode : 2;//占2位
	Bit modified : 1; //占1位
	Bit prot_owner : 3;
	Bit prot_group : 3;
	Bit prot_world : 3;
	//。。还可以写,共32位
};
enum { READ = 01,WRITE=02 };
//extern "C" void show(char *);
//extern "c",c与C++混在一起,c++调用c语言的函数,就需要extern "c"
extern "C" void show(const char *);//添加一个const就可以了
//严重性	代码	说明	项目	文件	行	禁止显示状态
//错误(活动)	E0167	"const char *" 类型的实参与 "char *" 类型的形参不兼容	cc43a_demo	C : \Users\TT2018\Documents\Visual Studio 2017\Projects\cc43a_demo\cc43a_demo\cc43a_demo.cpp	78

int main()
{
	show("hello extern \"C\"\n");
	File myFile;
	myFile.mode = WRITE;//位域使用方法
	myFile.modified = 1; //表示文件被修改了
	TokenValue myToken = { 'a' };//第一个给cval,a就是 97。
	cout << myToken.ival << endl;//ival读取的结果就是977

	int x;
	volatile int y;//告诉c++,不要对y进行优化,不要改变在内存中的位置

	//getchar();
	//创建对象用new操作符,创建对象,分配内存。
	Item_base *pItem = new Item_base();
	allocator<Item_base> a;//指定分配100的内存空间分配
	a.allocate(100);//指定分配100的内存空间分配

	Item_base *bp = new Item_base();
	Bulk_item *dp = new Bulk_item();

	Item_base *bp2 = dp;//派生类对象,转基类对象
	Bulk_item *dp2 = dynamic_cast<Bulk_item*>(bp);//基类转派生类。//动态类型转换,就用到了RTTI(运行时对象类型识别)
	if (typeid(Bulk_item) == typeid(*dp))
		cout << "Bulk_item的类型" << endl;
	//typeid,检查对象的类型,返回的是typeinfo ,name()
	cout << typeid(*bp).name() << endl;//用到了RTTI(运行时对象类型识别)
	cout << typeid(*dp).name() << endl;//用到了RTTI(运行时对象类型识别)

	std::string Item_base::*p=&Item_base::isbn; //指针指向Item_base类的字符串成员
	
	double(Item_base::*pmf)(std::size_t) const=&Item_base::net_price;//指向函数指针
	Item_base::Dog dog;//使用嵌套类

	system("pause");
	return 0;
}

demo.c

#include <stdio.h>

//c语言的
void show(char *msg)
{
	printf("%s\n",msg);
}
发布了356 篇原创文章 · 获赞 186 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104074854