C++基础 class、struct、union详细
1、类class
类是面向对象中的特性,在c中是没有类的概念。通常用class来表示,cpp中有抽象类,但是没有接口这种说法,cpp支持多继承。
一个普通的类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
构造函数和析构函数:
其中Fruit()表示构造函数,~Fruit()表示析构函数。构造函数用来创建对象,设置初始化参数。析构函数在对象销毁的时候执行。
修饰符:
private:表示私有成员,外部不可访问,只有自身类和友元函数可以访问。public:表示公共成员,外部可以访问。protected:表示保护成员,保护成员和私有成员相似,但是子类可以访问保护成员。
类中的成员函数:
我们在类中创建函数的时候,可以直接初始化,或者在类外部实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
友元函数:
友元函数虽然可以在类中定义,但是它不属于类的成员函数,必须在类外部实现。它可以访问定义类中的private和protected成员。
友元类:友元类中的所有函数都是该类的友元。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
this指针:类的成员函数中都可以用this指针来访问类成员,this指针是const指针,不可修改。
虚函数、纯虚函数、抽象类:
虚函数:使用关键字virtual修饰
1 2 3 |
|
虚函数表示被子类重写的时候,调用子类的函数而不是父类的此函数
纯虚函数:空的虚函数
1 |
|
抽象类:只要类中有纯虚函数就代表是抽象类
抽象类是被实体化的,必须通过子类创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
继承:注意继承需使用public修饰,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
调用看输出结果:
1 2 3 4 |
|
输出:
fuck apple
fuck 1
fuck apple 22
fuck()是纯虚函数,调用的是子类fuck1()调用的是父类的方法fuck2()因为是虚函数,又被子类重写了,所以调用的是子类。如果子类不重写虚函数,还是会调用父类的。
多继承如下:
1 2 3 |
|
2、结构体struct
cpp可以用struct来创建自定义数据结构,相当于java中的bean类
创建一个基本的结构体:
1 2 3 4 5 6 |
|
可以在} ;之间创建一个或多个结构体对象:
1 2 3 4 5 6 |
|
数据局初始化:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
使用类型别名:
1 2 3 4 |
|
我感觉是无用的语法糖。
结构体指针:
1 2 3 4 5 6 7 8 9 |
|
和普通指针没啥区别
结构体和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可以继承
