C++ Primer Plus笔记: 2023.06.24

1.C++允许在声明结构变量时省略关键字struct,就像这样:

#include <iostream>
using namespace std ;

struct inflatable
{
	char name[20] ;
	float volume ;
	double price ;
} ;

inflatable hat ;
inflatable woopie_cushion ;
inflatable mainframe ;
inflatable goose ;
inflatable vincent ;

int main()
{
	return 0 ;
}

访问类成员函数(如cin.getline( ))的方式是从访问结构成员变量
(如vincent.price)的方式衍生而来的。

2.结构变量的初始化:
比如下面的结构类型

struct inflatable
{
	char name[20] ;
	float volume ;
	double price ;
} ;

可采用这样的初始化方式:

inflatable guest = 
{
	"Glorious Gloria",
	1.88,
	29.99
} ;

inflatable duck = {"Daphne", 0.12, 9.98} ;

还可将等号去掉:

inflatable pal 
{
	"Audacious Arthur",
	3.12,
	32.99
} ;
	
inflatable duck {"Daphne", 0.12, 9.98} ;

3.C++结构变量的初始化中,若大括号内未包含任何东西,则各个成员将被设为0。且不允许缩窄转换。

缩窄指的是变量的类型可能无法表示赋给它们的值。例如,不允许将浮点型转换为整型。

4.C++使用户定义的类型与内置类型尽可能相似。例如,可以将结构作为参数传递给函数,也可以让函数返回一个结构。另外,还可以使用赋值运算符( = )将结构赋值给另一个同类型的结构,即使成员是数组。

5.可以同时完成定义结构和创建结构变量的工作:

struct perks
{
	int key_number ;
	char car[12] ;
} mr_smith, ms_jones ;

甚至可以初始化以这种方式创建的变量:

struct parks
{
	int key_number ;
	char car[12] ;
} mr_glitz = 
{
	7,
	"Packard"
};

6.关于结构数组的初始化,可采用如下方法:

struct inflatable
{
	char name[20] ;
	float volume ;
	double price ;
} ;

inflatable guests[2] =
{
	{"Bami", 0.5, 21.99},
	{"Godzilla", 2000, 565.99}
} ;

7.共用体能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double。共用体只能存储int、long或double。也就是一次只能存储一种类型的值。下面的代码说明了这一点:

#include <iostream>
using namespace std ;

union one4all
{
	int int_val ;
	long long_val ;
	double double_val ;
} ;

int main()
{
	one4all pail ;
	cout << "The first value: " << endl ;
	pail.int_val = 15 ;
	cout << "pail.int_val = " << pail.int_val << endl ;
	cout << "pail.long_val = " << pail.long_val << endl ;
	cout << "pail.double_val = " << pail.double_val << endl << endl ;

	cout << "The Second value: " << endl ;
    pail.long_val = 1000000000 ;
    cout << "pail.int_val = " << pail.int_val << endl ;
    cout << "pail.long_val = " << pail.long_val << endl ;
    cout << "pail.double_val = " << pail.double_val << endl << endl ;
	
	cout << "The Third value: " << endl ;
    pail.double_val = 1.38 ;
    cout << "pail.int_val = " << pail.int_val << endl ;
    cout << "pail.long_val = " << pail.long_val << endl ;
    cout << "pail.double_val = " << pail.double_val << endl << endl ;

	
	return 0 ;
}

运行结果:

The first value: 
pail.int_val = 15
pail.long_val = 15
pail.double_val = 7.41098e-323

The Second value: 
pail.int_val = 1000000000
pail.long_val = 1000000000
pail.double_val = 4.94066e-315

The Third value: 
pail.int_val = -515396076
pail.long_val = 4608893786658418196
pail.double_val = 1.38

8.共用体用途之一是,当数据项使用两种或更多格式时(但不会同时使用),可节省空间,假设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串。在这种情况下可以这样做:

struct widget
{
	char brand[20] ;
	int type ;
	union id
	{
		long id_num ;
		char id_char[20] ;
	} id_val ;
} ;

还可以使用匿名共用体,其成员将成为位于相同地址出的变量。显然,每次只有一个成员是当前的成员:

struct widget1
{
	char brand[20] ;
	int type ;
	union
	{
		long id_num ;
		char id_char[20] ;
	} ;
} ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值