类、结构体、联合详解

一、类

1.1类与结构体区别

1、结构体基本用在很多数据,需要一个结构体来封装这些数据。而类的话,是面向对象的思想,可以有很多接口让人调用,私有变量等外部不能调用,还有保护类型的变量。
2、结构体也可以被认为是一种特殊的类,它不存在任何函数,构造和析构函数也没有,而且是一个公共的的类。
3、结构体在默认情况下成员是公共的(public),类在默认情况下成员是私有的(private)。
4、C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问级别是private。
5、C++结构体的继承默认是public,而c++类的继承默认是private。
6、类要加上public变成共有的才能被访问,而结构本身就是共有的可直接访问。
7、C定义结构体变量时需要加struct关键字,C++中定义结构体变量时可以不加struct关键字。

1.2类的基本使用

class Date
{
private:       
    int hour;
    int minute;
    int second;

public:  
    void display()
    {
        cout << hour << endl;
        cout << minute << endl;
        cout << second << endl;
}

    Date(int h,int m,int s){//类中不可以初始化变量,所以一般用构造函数进行初始化
        hour=h;
        minute=m;
        second=s;
    }
};

1.2.1构造函数:

函数名必须与类名同名,不返回任何值,不具有任何类型,再建立对象时自动调用。(构造函数可以重载)
定义对象则用:

Date date(15,20,50);

也可在类外定义构造函数:

Date:: Date(int h,int m,int s){
        hour=h;
        minute=m;
        second=s;
}

1.2.2参数初始化表:

class Date
{
private:       
    int hour;
    int minute;
    int second;

public:  
	Date(int h,int m,int s):hour(h),minute(m),second(s){}
    void display()
    {
        cout << hour << endl;
        cout << minute << endl;
        cout << second << endl;
}
};

1.2.3析构函数:

函数名时再类名前加一个~,析构函数与构造函数功能也是相反,再对象生命周期结束时,会调用析构函数,没有函数类型,不能被重载。
注意:先构造的后析构,后构造的先析构

二、结构体

2.1Struct\typedef定义与赋值方法:

#include<iostream>
#include<stdio.h>
using namespace std;
//结构体定义和初始化
struct{
    int a;
    char b;
    string c;
}part1,part2={2,'a',"hello"};
//注意这样操作是错误的,因为重复的结构信息会使程序膨胀。
/*
!!!wrong!!!
struct{
    int a;
    char b;
    string c;
}part3;
struct{
    int a;
    char b;
    string c;
}part4;
*/
//声明多个结构体通过以下方式:

struct part{
    int a;
    char b;
    string c;
}part6;//与变量声明放在一起也是可行的
//同样还可以用typedef来定义真实的类型名
typedef struct{
    int a;
    char b;
    string c;
}STPart;
int main(){
    cout<<part2.a<<part2.b<<part2.c<<endl;
    struct part part5,part6;//声明,注意一定要保持struct
    STPart part7,part8;//注意typedef声明的结构体声明变量不需要加struct
    //变量赋值
    part5=(struct part){5,'a',"hello5"};
    /*
    赋值二:
    part5.a=5;
    part5.b='a';
    part5.c="hello5"
    */
    part7=(STPart){7,'a',"hello7"};
    cout<<part5.a<<part5.b<<part5.c<<endl;
    cout<<part7.a<<part7.b<<part7.c<<endl;
    return 0;

}

2.2输出结果

在这里插入图片描述

三、联合

3.1联合和结构体的区别

3.1.1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻,
联合中只存放了一个被选中的成员, 而结构的所有成员都存在。
3.1.2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在.
在这里插入图片描述

3.2.联合和结构体联合的使用

//联合的使用,一般为了节省空间的使用
//例如:表示物品属性:
//书籍:书名,作者、页数
//杯子:大小,颜色

//联合的使用,一般为了节省空间的使用
//例如:表示物品属性:
//书籍:书名,作者、页数
//杯子:大小,颜色
//那可以结合结构体和联合使用
struct thing{
    int price;
    int thing_type;
    union{
        struct{
            string bookname;
            string auther;
            int pages;
        }book;
        struct{
            int sizes;
            string color;
        }cup;
    };
};

发布了18 篇原创文章 · 获赞 8 · 访问量 2099

猜你喜欢

转载自blog.csdn.net/weixin_43698704/article/details/103785660
今日推荐