C++结构体和类

前段时间由于忙于学业,搁置了C++的学习,现在开始C++复健计划,回顾之前的代码复习所学的知识。


话不多说直接上代码:

using namespace std;
struct nosex//结构体,名为nosex
{
	string n = "复习";
};
struct boy//结构体,名为boy
{
	union { int a = 1; };//共同体,可以嵌入结构体
	int high;
	char length;
	double weight;
	struct nosex n;//结构体内的数据可以来自其他结构体
};
struct idle
{
	string* q;//一个字符串指针
};
inline void change(int a, int b)//内联函数
{
	int tmp;
	tmp = a; a = b; b = tmp;
	cout << "a=" << a << endl << "b=" << b << endl;
}
class girl
{
private:
	int weight;
public:
	int age;
	char yanzi;
	void getweight()
	{
		cout << weight << endl;
		getage();//类内成员函数递归
	};
	void getage();
	void getweight(int w)//成员函数重载
	{
		cout << weight << endl;
	};
	girl(int wei, int ag, char yan) :weight(wei), age(ag), yanzi(yan)//初始化
	{
		cout << "调用了girl类的构造函数girl(int wei, int ag, char yan)" << endl;
	}
	~girl()
	{
		cout << "调用了girl类的析构函数" << endl;
	}
};
void girl::getage()//类外定义成员函数,并通过函数访问私有变量
{
	cout << age << endl;
}
int main()
{
	girl xiaoxiao(56.21, 18, '可');
	struct boy bobo = { 188,'long',78.21 };
	girl* p = &xiaoxiao;//girl类指针,指向girl对象xiaoxiao
	(*p).getage();
	bobo.n;
	string qq = "调用qq字符串";
	struct idle idleob = { &qq };//结构体初始化,相当于*q=&qq
	cout << *(idleob.q) << endl;
	change(187, 178);
}

运行结果:

 结构体部分:

struct nosex//结构体,名为nosex
{
	string n = "复习";
};
struct boy//结构体,名为boy
{
	union { int a = 1; };//共同体,可以嵌入结构体
	int high;
	char length;
	double weight;
	struct nosex n;//结构体内的数据可以来自其他结构体
};
struct idle
{
	string* q;//一个字符串指针
};
struct boy bobo = { 188,'long',78.21 };
bobo.n;
string qq = "调用qq字符串";
struct idle idleob = { &qq };//结构体初始化,相当于*q=&qq
cout << *(idleob.q) << endl;

首先可以看到结构体的结构是:struct 结构体名 {},括号内可以是各种类型的数据(int,double,char...),可以是其他结构体的数据,也可以是共同体

什么是共同体呢?共同体(union)是一种数据格式,能够存储不同的数据类型,但是每一次只能存储一个值,共同体的长度等于最大成员的长度,使用共同体可以节省内存空间。

其次是结构体的初始化,结构体初始化的结构为 struct 结构体名 结构体对象名 ={},括号内数据一一对结构体内数据进行初始化,结构体对象可以调用其他结构体的数据(前提是这个数据在这个结构体当中)。当结构体内数据有指针时,用&取地址符使指针指向特定数据,例如代码中的指针q,指向字符串qq,后面通过解引用访问了qq的数据。

解引用*,即通过指针,找到对应的内存和内存中的数据。通过解引用访问或修改指针指向的内存内容,解引用后等价于指针指向的变量。a=99;int*p=&a;(*p)即相当于a。

类部分:

class girl
{
private:
	int weight;
public:
	int age;
	char yanzi;
	void getweight()
	{
		cout << weight << endl;
		getage();//类内成员函数递归
	};
	void getage();
	void getweight(int w)//成员函数重载
	{
		cout << weight << endl;
	};
	girl(int wei, int ag, char yan) :weight(wei), age(ag), yanzi(yan)//初始化
	{
		cout << "调用了girl类的构造函数girl(int wei, int ag, char yan)" << endl;
	}
	~girl()
	{
		cout << "调用了girl类的析构函数" << endl;
	}
};
void girl::getage()//类外定义成员函数,并通过函数访问私有变量
{
	cout << age << endl;
}
girl xiaoxiao(56.21, 18, '可');
girl* p = &xiaoxiao;//girl类指针,指向girl对象xiaoxiao
(*p).getage();

首先类内分为private私有,public公有还有protected受保护的,三者区别在以后遇到再说明。在这里我们简单知道,类范围内数据是可以互相访问的无论是否private,在类外就无法直接访问private的数据,但是可以通过间接的方法,例如代码中的getweight()成员函数,通过成员函数间接访问私有变量。第二个是类内成员函数可以递归可以重载等等,限制还是比较少的。

类的初始化,类的初始化格式是 类名 类对象名(),括号内是传入的实参。在构造函数内将数据一一赋给类内的变量,值得一提的是,class如不定义构造函数和析构函数将使用默认构造函数和析构函数,构造函数可以通过改变形参数量,类型,顺序进行重载,析构函数不可以重载。

类外定义或调用类内成员函数,类名::成员函数,即可以在类外调用或者定义成员函数。

类对象的创建和初始化,最常见的形式就是代码中的隐式构造:类名 类对象名(实参列表) 除此之外还有显式构造:类名 类对象=类名(实参列表)

内联函数部分:

inline void change(int a, int b)//内联函数
{
	int tmp;
	tmp = a; a = b; b = tmp;
	cout << "a=" << a << endl << "b=" << b << endl;
}
change(187, 178);

加inline关键字,使常规函数变成内联函数(C++新特性),内联函数的代码和其他程序代码联系起来,编译器将使用相应的函数代码替代函数调用,也就是说使用内联函数时不是调用内联函数的代码,而是使用相应的代码。使用内联函数的好处是提高运行速率,但是占用更多内存,适用于行数少的代码。

本文章主要回顾的知识点有:共同体,内联函数,结构体和类的初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值