C++基础 class、struct、union详细 1、类class类是面向对象中的特性在c中是没有类的概念。通常用class来表示cpp中有抽象类但是没有接口这种说法cpp支持多继承。一个普通的类12345678910111213141516classFruit{private:public:Fruit();~Fruit();};Fruit::Fruit(){}Fruit::~Fruit(){}构造函数和析构函数其中Fruit()表示构造函数~Fruit()表示析构函数。构造函数用来创建对象设置初始化参数。析构函数在对象销毁的时候执行。修饰符private表示私有成员外部不可访问只有自身类和友元函数可以访问。public:表示公共成员外部可以访问。protected:表示保护成员保护成员和私有成员相似但是子类可以访问保护成员。类中的成员函数我们在类中创建函数的时候可以直接初始化或者在类外部实现123456789101112131415161718192021222324252627282930classFruit{private:intcount;public:Fruit();~Fruit();voidadd(inti);//直接初始化intgetCount(){returncount;}};Fruit::Fruit(){cout create fruit endl;}Fruit::~Fruit(){cout fruit deletedendl;}//在类外部实现voidFruit::add(inti){count count i;}友元函数友元函数虽然可以在类中定义但是它不属于类的成员函数必须在类外部实现。它可以访问定义类中的private和protected成员。友元类友元类中的所有函数都是该类的友元。12345678910111213141516171819202122232425262728293031#include iostreamusingnamespacestd;classFruit{private:intcount 0;public:Fruit();~Fruit();// friend void printF(Fruit ft);friendvoidprintF(Fruit ft);};// void printF(Fruit ft){// cout ft.count endl;// }voidprintF(Fruit ft){cout ft.count endl;}intmain(){Fruit fruit;printF(fruit);return0;}this指针类的成员函数中都可以用this指针来访问类成员this指针是const指针不可修改。虚函数、纯虚函数、抽象类虚函数使用关键字virtual修饰123virtualvoidfuck2(){cout fuck 2endl;}虚函数表示被子类重写的时候调用子类的函数而不是父类的此函数纯虚函数空的虚函数1virtualvoidfuck() 0;抽象类只要类中有纯虚函数就代表是抽象类抽象类是被实体化的必须通过子类创建。12345678910111213141516classFruit{private:public:Fruit();~Fruit();virtualvoidfuck() 0;voidfuck1(){cout fuck 1endl;}virtualvoidfuck2(){cout fuck 2endl;}};继承注意继承需使用public修饰1234567891011121314151617classApple:publicFruit{private:public:Apple();~Apple();voidfuck(){cout fuck appleendl;};voidfuck2(){cout fuck apple 22endl;};};调用看输出结果1234Apple apple;apple.fuck();apple.fuck1();apple.fuck2();输出fuck applefuck 1fuck apple 22fuck()是纯虚函数调用的是子类fuck1()调用的是父类的方法fuck2()因为是虚函数又被子类重写了所以调用的是子类。如果子类不重写虚函数还是会调用父类的。多继承如下123classApple:publicFruit,publicOrange{}2、结构体structcpp可以用struct来创建自定义数据结构相当于java中的bean类创建一个基本的结构体123456structBook{string name;intid;longintISBN;};可以在} ;之间创建一个或多个结构体对象123456structBook{string name;intid;longintISBN;}book1,book2;数据局初始化12345678910111213!--直接赋值--book1.name C programing;!--或者创建的时候初始化--Book book3{Android,1,21321231};coutbook3.idendl;coutbook3.nameendl;coutbook3.ISBNendl;使用类型别名1234typedefstruct{intid;string name;}Ebook;我感觉是无用的语法糖。结构体指针123456789Ebook ebook{2,啊哈哈哈};Ebook *ptr_book;ptr_book ebook;cout ptr_book-id endl;cout ptr_book-name endl;和普通指针没啥区别结构体和class的区别在哪里总的来说struct更适合看成是一个数据结构的实现体class更适合看成是一个对象的实现体。默认的继承访问权限struct默认是public的class默认是private的。c和cpp中的struct有什么不同c中只能作为数据的结构体不能有函数cpp中struct是可以有函数的c中没有修饰符cpp中结构体可以有public、protected、private修饰符c中创建结构体必须加struct前缀比如struct Book book真是book思议c中没有继承概念cpp中struct可以继承