一、类
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;
};
};