首页 > 编程语言 >复合结构(C++ Primer)

复合结构(C++ Primer)

时间:2024-11-01 16:23:12浏览次数:2  
标签:CandyBar include cout int 复合 C++ new Primer string

复合结构(C++ Primer)

使用结构体和string

使用结构体示例代码:

#include <iostream>
#include <string>
using namespace std;

struct person{
    string fn;
    string sn;
    char grade;
    int age;
};

int main(){
    person *a=new person;
    cout<<"what is your first name?";
    cin>>a->fn;
    cout<<endl;
    cout<<"what is your last name?";
    cin>>a->sn;
    cout<<endl;
    cout<<"what letter grade do you deserve?";
    cin>>a->grade;
    cout<<endl;
    cout<<"what is your age?";
    cin>>a->age;
    cout<<"Name:"<<(*a).fn<<(*a).sn<<endl;
    cout<<"Grade:"<<(char)((*a).grade+1)<<endl;
    cout<<"Age:"<<(*a).age<<endl;
    delete a;
    return 0;
}

这部分代码很好的给出了什么时候用据点运算符,什么时候用->运算符。简单来讲,当前者是结构体名时,就是用句点,当前者是指向结构体的指针时就是用->运算符。

当使用ascii码时,想要进行符号运算(*a).grade+1,符号会被转换成整数型,所以前面要加上转换类型(char)。

输出结果:

what is your first name?wuqing

what is your last name?maliao

what letter grade do you deserve?A

what is your age?23
Name:wuqingmaliao
Grade:B
Age:23

不使用new来分配内存,同时也不使用string而是用char数组,实例代码:

#include <iostream>
using namespace std;

struct person{
    char fn[20];
    char sn[20];
    char grade;
    int age;
};

int main(){
    person a;
    cout<<"what is your first name?";
    cin>>a.fn;
    cout<<endl;
    cout<<"what is your last name?";
    cin>>a.sn;
    cout<<endl;
    cout<<"what letter grade do you deserve?";
    cin>>a.grade;
    cout<<endl;
    cout<<"what is your age?";
    cin>>a.age;
    cout<<"Name:"<<a.fn<<a.sn<<endl;
    cout<<"Grade:"<<(char)(a.grade+1)<<endl;
    cout<<"Age:"<<a.age<<endl;
    return 0;
}

结构体数组

定义一个结构体,声明结构体数组并初始化。

示例代码:

#include <iostream>
#include <string>
using namespace std;

struct  CandyBar
{
    string name;
    double weight;
    int kaLuLi;
};

int main(){
    CandyBar a[3]={{"A",12.3,8},{"B",50.6,76},{"C",54.9,126}};
    for(int i=0;i<3;i++){
        cout <<a[i].name<<" ";
        cout <<a[i].weight<<" ";
        cout <<a[i].kaLuLi<<endl;
    }
    return 0;
}

运行结果:

A 12.3 8
B 50.6 76
C 54.9 126

使用new来为结构分配内存:

#include <iostream>
#include <string>
using namespace std;

struct  CandyBar
{
    string name;
    double weight;
    int kaLuLi;
};

int main(){
    CandyBar *b[3]={new CandyBar, new CandyBar, new CandyBar };
    for(int i=0;i<3;i++){
        b[i]->name="a";
        b[i]->weight=36.8+i;
        b[i]->kaLuLi=23+i;
    }
    for(int i=0;i<3;i++){
        cout <<b[i]->name<<" ";
        cout <<b[i]->weight<<" ";
        cout <<b[i]->kaLuLi<<endl;
    }
    delete b[3];
    return 0;
}

运行结果:

a 36.8 23
a 37.8 24
a 38.8 25

标签:CandyBar,include,cout,int,复合,C++,new,Primer,string
From: https://www.cnblogs.com/wuqingmaliao/p/18520510

相关文章

  • 【C++】——高效构建与优化二叉搜索树
    活着就意味必须要做点什么,请好好努力。——村上春树《地下》目录1、二叉搜索树BST1.1什么是二叉搜索树1.2BST的性能功能分析2、二叉搜索树的实现2.1BST框架2.2BST插入2.3BST搜索2.4BST删除2.5BST细节问题3、二叉搜索树遍历3.1中序遍历3.2前序遍历3.3......
  • UEC++中的GetClass和StaticClass函数
    GetClass()用途:GetClass() 是 UObject 类的一个实例方法,用于获取调用它的对象的类信息。返回类型:返回 UClass*,即指向调用对象的类的 UClass 对象的指针。使用场景:当你有一个 UObject 或其子类的实例,并且想要获取这个实例所属类的信息时,你会使用 GetClass()。例......
  • UEC++ UClass类
    一、UClass的定义与功能UClass是虚幻引擎中实现反射机制的关键部分,它允许引擎在运行时动态地查询和操作类的信息。每个UClass都保留了一个称作“类默认对象(ClassDefaultObject,简称CDO)”的模板对象,这个对象由类的构造函数生成,并且之后不会被修改。UClass和CDO都可以为特定对......
  • 题解 洛谷 Luogu P1308 [NOIP2011 普及组] 统计单词数 C++
    题目传送门:P1308[NOIP2011普及组]统计单词数-洛谷|计算机科学教育新生态https://www.luogu.com.cn/problem/P1308getline() 会清除使当次getline() 终止的换行,而cin 不会因此cin 以换行终止,之后还需要getline()的话,需要用getchar() 吞换行Linux的一些相......
  • 为什么 C++ 编译速度比 Java 慢得多
    ###为什么C++编译速度比Java慢得多在探讨为什么C++编译速度比Java慢得多时,我们可以归纳出几个核心原因:C++的编译模型更为复杂、模板元编程、宏处理以及链接时间。其中,C++的编译模型更为复杂这一点尤为突出。C++需要处理的细节更多,如模板实例化、头文件的重复包含等,这些......
  • 【C++】string 类模拟实现:深入探索字符串操作原理
     快来参与讨论......
  • C++11的一些语法
    vector的用法在C++中,std::vector是一个动态数组,它可以在运行时调整大小,std::vector是C++标准模板库(STL)中的一个重要容器类。基本用法在使用std::vector之前,需要包含头文件<vector>。#include<iostream>#include<vector>当然,现在包含万能头<bits/stdc++.h>......
  • 【C++】智能指针的正确使用方式
    本文将从这几方面讲解智能指针:智能指针的应用场景分析智能指针的性能分析:为什么shared_ptr性能比unique_ptr差指针作为函数参数时应该传,传值、传引用,还是裸指针?对于智能指针的使用,实际上是对所有权和生命周期的思考1.unique_ptr:专属所有权1.1unique_ptr介绍我们大......
  • C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理
    一、介绍今天是这个系列《C++之Opencv入门到提高》得第三篇文章。今天这篇文章也不难,主要介绍如何使用Opencv对图像进行掩膜处理,提高图像的对比度。在这个过程中,我们可以学到如何获取图像指针、如何处理像素值越界等问题。我们一步一个脚印的走,收获就会越来越多。虽然......
  • PCL 法线微分(DoN)分割(C++详细过程版)
    目录一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年11月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。一、概述  法线微分(DoN)分割在PCL里有现成的调用函数,具体算法原理和实现代码见:PCL基于法线微分(D......