zoukankan      html  css  js  c++  java
  • 【转】C++

    声明

    转载自:https://www.cnblogs.com/wlw-x/p/11566191.html

    关于结构体构造函数使用总结

    三种结构体初始化方法
    1.利用结构体自带的默认构造函数
    2.利用带参数的构造函数
    3.利用默认无参的构造函数

    要点:
    在建立结构体数组时,如果只写了带参数的构造函数将会出现数组无法初始化的错误!!!各位同学要牢记呀!
    下面是一个比较安全的带构造的结构体示例

    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
    发现与预设的一样结果证明三种赋值方法都起了作用,好了就写到这里.

    参数的构造函数注意按顺序写就行了
    参数的构造函数还能实现一边初始化某一个元素,一边计算另一元素的功能, 如下:

    
    struct line{
    	double k, b;
    	int id;
    	line () {}
    	line(int x1, int y1, int x2, int y2, int cnt) : id(cnt) {
    		if(x1 == x2) k = 0, b = max(y1, y2);
    		else k = (double)(y2-y1)/(x2-x1), b = (double)y1-k*x1;
    	}
    	double calc(int x) {
    		return k*x+b;
    	}
    }tr[MAX<<2];
    
  • 相关阅读:
    synchronized原理
    实现二叉搜索树
    2.oracle内存结构和后台进程02
    1.Oracle的内存结构和后台进程01
    15.Oracle的用户、Schema、数据库、表空间、数据文件的相互关系
    14.oracle的归档日志
    8.事务是隔离还是不隔离?
    7.行锁功过:怎么减少行锁对性能的影响?
    50.Mysql不完全恢复之innodb_force_recovery参数
    49.Mysql命令之Mysqlcheck
  • 原文地址:https://www.cnblogs.com/tyner/p/11783156.html
Copyright © 2011-2022 走看看