zoukankan      html  css  js  c++  java
  • 对象初始化

    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#经验,更容易混。

  • 相关阅读:
    一点一点学写Makefile(3)-增加第三方库和头文件
    一点一点学写Makefile(2)-自动搜所当前目录下的所有源文件
    一点一点学写Makefile-1
    linux下使用libxml2实现对xml文件的读取及查询
    struts2 谷歌浏览器保存date类型数据时报错
    复习
    day31
    day30
    作业29
    day29
  • 原文地址:https://www.cnblogs.com/buptmemory/p/2915875.html
Copyright © 2011-2022 走看看