• C++的结构体使用


    C++的结构体

    一、struct的演变

    C中的struct不能包含任何函数。因为在面向过程的编程中,数据和数据操作是分开的,struct作为一种数据类型,其中不能定义函数进行操作行为。

    struct A
    {
    	int a;
    	int b;
    	//成员列表
    };
    

    而C++中的struct可以包含成员函数,在兼容C的同时也符合面向对象编程需要

    二、C++struct使用

    除了成员变量与成员函数外,C++中的struct可以写构造函数

    结构体中构造函数的写法

    结构体名(参数列表):初始化列表{ 函数体}

    struct foo{
    	int numb;
    	string str;
    	foo(int a,string s):numb(a),str(s){}//构造函数结尾是没有分号的
    }; 
    

    具体使用

    在建立结构体数组时,如果只写了带参数的构造函数将会出现数组无法初始化的错误!!!

    安全写法

    struct node{
        int data;
        string str;
        char x;
      node() :x(), str(), data(){} //无参数的构造函数数组初始化时调用
      node(int a, string b, char c) :data(a), str(b), x(c){}//有参构造
    }N[10];
    

    下面我们分别使用默认构造和有参构造,以及自己手动写的初始化函数进行会结构体赋值

    并观察结果

    测试用例如下:

    #include <iostream>
    #include <string>
    using namespace std;
    struct node{
    	int data;
    	string str;
    	char x;
    	//自己写的初始化函数
    	void init(int a, string b, char c){
    		this->data = a;
    		this->str = b;
    		this->x = c;
    	}
    	node() :x(), str(), data(){}
    	node(int a, string b, char c) :x(c), str(b), data(a){}
    }N[10];
    int main()
    {
    	  N[0] = { 1,"hello",'c' };  
    	  N[1] = { 2,"c++",'d' };    //无参默认结构体构造体函数
    	  N[2].init(3, "java", 'e'); //自定义初始化函数的调用
    	  N[3] = node(4, "python", 'f'); //有参数结构体构造函数
    	  N[4] = { 5,"python3",'p' };
    
    	//现在我们开始打印观察是否已经存入
    	for (int i = 0; i < 5; i++){
    		cout << N[i].data << " " << N[i].str << " " << N[i].x << endl;
    	}
    	system("pause");
    	return 0;
    }
    

    输出结果

    1 hello c
    2 c++ d
    3 java e
    4 python f
    5 python3 p
    
  • 相关阅读:
    redis几种数据类型以及使用场景
    Ubuntu16.04安装redis和php的redis扩展
    详细透彻解读Git与SVN的区别(集中式VS分布式)
    bootstrap轮播如何支持移动端滑动手势
    vue添加cnzz统计访问量
    el-tabs值修改时更新路由参数值
    Vue ,elementUI,dropdown组件中command方法添加额外参数的方法
    vue页面滚动监听
    mintui tabbar底部跳转页面
    vue 引入bootstrap
  • 原文地址:https://www.cnblogs.com/Hokkaido-JL/p/13888617.html
Copyright © 2020-2023  润新知