• 对象初始化


    struct Test
    {
             Test(int){}
             Test(){}
             void fun(){cout<<"func"<<endl;}
    };
    int main()
    {
             Test a(1);
             Test b(); //此处是一个函数声明,返回值为Test类型,而不是对象定义!
             Test b1; //对象定义
             Test *c = new Test();
             Test *d = new Test(2);
             a.fun();
             b.fun(); //error!
    c->fun();
             d->fun();
             return 0;
    }

    其实这个就是C++的语法而已。记住就行。
    可以认为缺省构造函数和带参数构造函数在定义对象时使用不同语法形式.
    test b 就是一个名为b的test类型的变量
    对比built-in type:
    int a  就是一个名为a的int型变量,注意这时也没有(),所以为了达到与built-in类型的一致性,对于类类型的无参数定义,也不能加()
    如果非写成 test b(); 相当于声明了一个无参函数,返回值为 test对象。如果出现这种错误,编译器并不会报错,直到把b作为实例用时才会出现矛盾。所以出错会在 b.fun()  编译不过。

    其实b()这个写法可以用在new上
    如: test * b = new test()  跟 test * b = new test 是一样的。都相当于调用 构造函数test();个人认为因为这样可以,所以之前的代码容易让人混淆。 另,如果有C#经验,更容易混。

  • 相关阅读:
    行为科学统计第一章知识点总结
    JVM垃圾回收参数说明整理
    RestTemplate
    SparkContext源码阅读
    Spark RDD类源码阅读
    Scala学习笔记
    JAVA虚拟机类型转换学习
    工程开发实用类与方法总结(未完)
    JAVA 几种引用类型学习
    JAVA虚拟机垃圾回收算法原理
  • 原文地址:https://www.cnblogs.com/buptmemory/p/2915875.html
Copyright © 2020-2023  润新知