精华内容
下载资源
问答
  • 类的构造函数看似简单,实则很有玄机,在构造一个类构造函数时,只要遵循以下步,便可以建立出一个正确的高效的构造函数:  1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数, 就该...

    推荐一本C++经典好书:effetive c++,该篇文章部分来源于该书


    类的构造函数看似简单,实则很有玄机,在构造一个类的构造函数时,只要遵循以下几步,便可以建立出一个正确的高效的构造函数:


      1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数,  就该明确拒绝(effctive c++条款5,6)


      2.定义的构造函数不能指定其返回值的类型,也不能指定为void类型。


       3.若要用类定义对象,则构造函数必须是公有型成员函数,否则类无法实例化。

         若类仅用于派生其他类,则构造函数可定义为保护型成员函数(1.为什么private不行?我理解的是只用作一次派生是可以的,

         但用作两次派生就不可以了, 因为若派生两次后,私有成员就没法再被访问了,也即基类的构造函数无法被调用了

     

      4.倘若有指针型成员变量,则要对拷贝构造函数进行重写(见我的另一篇文章:“若类中有指针型数据成员,类的几个函数的重写”)


      5..当构造函数重载或设定构造函数默认形参时,要注意避免出现二义性。

     

      6..构造函数最好使用成员初始值列表,而不要在构造函数内使用赋值操作

     

     7..考虑是不是要把构造函数设置为explict特性

     

      8.决不在构造函数和析构过程中调用virtual函数

     

     9.倘若是派生类的构造函数,则考虑是(1)用初始化成员列表值的形式调用特定的基类的构造函数还是(2)不提供初始化列表,默认调用基类的默认隐式构造函数

    展开全文
  • 我们都知道,super这个关键字其实就是代替了段字符串“new 父类名”,所以我就想既然用“outer.super(a)”能够编译通过,那“outer.new Inner(a)”应该也编译通过,于是我做了以下几个实验: 1、执行语句1,不...
  • 构造函数初探

    2017-05-25 16:16:41
    个类定义了它的对象被初始化的方式,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。只要类的对象被创建,就会执行构造函数构造函数的名字与类名相同,没有返回值,可以...

    每个类都定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。只要类的对象被创建,就会执行构造函数。

    构造函数的名字与类名相同,没有返回值,可以重载,不能被声明为const的。如果类中没有构造函数,编译器会提供一个默认的构造函数,默认的构造函数会对类的数据进行类内初始值初始化或者默认初始化,默认初始化则是随机值。

    一般来说,我们都会为类提供一个带参数的构造函数,采用构造函数初始值列表的形式或者赋值的形式,分别如下所示:

    class Student

    {

    public:

             Student(std::string s,int num,double gra) :name(s),number(num),grade(gra){}//自己定义的构造函数

    private:

             std::string name;

             int number = 0;

             double grade = 0;     

    };

    这是采用构造函数初始值列表的形式。

    class Student

    {

    public:

             Student(std::string s,int num,double gra)//自己定义的构造函数

             {

                       name= s;

                       number= num;

                       grade= gra;

             }

    private:

             std::string name;

             int number = 0;

             double grade = 0;

    };

    这是采用赋值的形式。

    初始化和赋值的区别在于:前者直接初始化数据成员,后者则先初始化再赋值。这样前者的效率更高。除此之外,如果成员是const、引用或者属于某种未提供默认构造函数的类类型,则必须采用构造函数初始值列表的形式。

    另外,如果自己定义了构造函数,那么编译器就不再提供一个默认的构造函数,所以一般会自己再定义一个默认的构造函数,通过Student() =default产生一个默认的构造函数。上述类的完整构造函数定义如下:

    class Student

    {

    public:

             Student()= default;

             Student(std::string s,int num,double gra) :name(s),number(num),grade(gra){}//自己定义的构造函数

    private:

             std::string name;

             int number = 0;

             double grade = 0;     

    };

    展开全文
  • 构造函数的基本定义1.C++规定,每个类必须有默认的构造函数,没有构造函数就不创建对象。 2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数一个没有参数的构造函数,它仅仅...

               构造函数的基本定义

    1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。

    2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。

    3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。

    4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。

    构造函数要点:

    1. c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的时候系统将自动调用那个类的构造函数。
    2. c++规定,所有的全局对象和全局变量一样都在主函数main()之前被构造,函数体内的静态对象则只构造一次,也就是说只在首次进入这个函数的时候进行构造
    3. 类是一个抽象的概念,并不是一个实体,并不能包含属性值(这里来说也就是构造函数的参数了),只有对象才占有一定的内存空间,含有明确的属性值!举个例子:

    protected:
    int number;
    int score;
    Teacher teacher("王大力");//错误,一个类的成员如果是另外一个类的对象的话,不能在类中使用带参数的构造函数进行初始化

    那么用什么方法可以解决呢?可以像这样      Student(char *temp):teacher(temp)。这就表示temp传递给了teacher成员,完成了构造函数直接给类成员初始化。

    但是用这种方法要注意下初始化的顺序问题:类成员的构造是按照在类中定义的顺序进行的,而不是按照构造函数说明后的冒号顺序进行构造的,这一点需要记住!

    析构函数的定义

    析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。

     

     

    展开全文
  • 写个c++报“构造函数有返回类型”, 谷歌一下,才找到原因: 原来是我定义后面没有用“;”结尾,构造函数默认把整个作为返回值了 2.新建后,报LNK2019:找不到一个函数的实现 原因是QT的一个BUG...

    1. 自己构造新类,注意必须在头文件最后加上分号

    写个c++类报“构造函数不能有返回类型”,

    谷歌一下,才找到原因:

    原来是我定义的类后面没有用“;”结尾,构造函数默认把整个类作为返回值了

    2. 新建类后,报LNK2019:找不到一个函数 的实现

    原因是QT的一个BUG,需要将生成目录删除并重新编译。

    3. C++调用C代码的问题

    转载于:https://www.cnblogs.com/myboat/p/11102847.html

    展开全文
  • 一个类只能定义一个静态构造函数。换句话说,静态构造函数被重载。 二. 静态构造函数不允许访问修饰符并且不接受任何参数。 三. 无论创建了多少类型的对象,静态构造函数只执行一次。 四. 运行库创建类...
  • 一个类只能定义一个静态构造函数。换句话说,静态构造函数被重载。 二. 静态构造函数不允许访问修饰符并且不接受任何参数。 三. 无论创建了多少类型的对象,静态构造函数只执行一次。 四. 运行库...
  • (4)构造函数重载:一个类可以包含多个构造函数,不同的构造函数之间必须在参数数量或者参数类型上有所区别。 (5)构造函数不被声明为const的,同是当我们创建一个const对象时,只有当构造函数完成之后,对象...
  • 个类分别定义来它的对象初始化方式,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这些函数叫构造函数构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 ...
  • 个类都分别定义了它的对象被初始化的方式,类通过一个几个特殊成员函数来控制其对象的初始化过程,这些函数叫做构造函数构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造...
  • 构造函数

    2018-03-28 19:26:31
    一个类必须有构造函数,要么用户自己定义,要么编译器自动生成。一旦用户自己定义构造函数,不管有几个,也不管形参如何,编译器都不再自动生成。最后需要注意的一点是,调用没有参数的构造函数也可以省...
  • C++构造函数

    2019-09-07 16:57:13
    个类都分别定义了它的对象初始化的过程,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这些函数称为构造函数 构造函数名字与类名相同 构造函数没有返回类型 不同于其他成员函数,构造函数被声明...
  • 定义:是一个特殊的成员函数,名字与类名相同,创建 类型对象时,由编译器自动调用,在对象的生命周期内有且只调用一次,以保证每个数据成员都有一个合适的初值。(它的功能由用户定义,在对象进入作用域时间...
  • 构造函数是不声明为虚函数的,因为虚函数对应一个virtual table(虚函数表),这个表的地址是存储在对象的内存空间的。 而在执行构造函数前,对象尚未完成创建,内存都没有被分配,所以无法去查询虚函数表...
  • 一、在c++中,关于构造函数有以下点说明: 1、构造函数最重要的作用是创建对象本身。 2、c++规定,每个类必须有一个构造函数,没有构造函数,则无法创建...4、只要一个类定义了一个构造函数,不管这个构造函数
  • C++构造函数详解

    千次阅读 2016-12-26 15:07:44
    一、概念 1.控制对象初始化过程的一个几个特殊的成员函数,叫做...1.它的产生:如果没有为显式的定义任一构造函数,那么编译器合适的时候会为我们隐式的定义一个默认构造函数,它又被称为合成的默认构造函数。 2
  • 类的静态构造函数不属于任何一个类的实例,具有如下几个特点: 1.static关键字修饰,无返回类型,无参数的构造函数 2.不通过代码显式的调用静态构造函数 3.静态构造函数在类的静态成员第一个范文或第一个类实例...
  • 构造函数与析构函数

    2014-02-19 11:01:28
    构造函数与析构函数 构造函数是特殊的成员函数 ...不能定义构造函数的类型(返回类型),也不能使用void 通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私
  • 作者:王姗姗, 华清远见嵌入式学院讲师。  在说构造函数之前我们得先弄明白几个问题,...一个类可以有多个构造函数,根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。  2、 类的成员对象  
  • c++,的对象作为形参时一定会调用复制构造函数吗?答:如果参数是引用传递,则...答:如果没有定义,编译器会自动为你定义一个,编译器自己定义的复制构造函数是按成员变量的值复制的。有几个成员变量就重新创...
  •  在c++中,每一个类编译器都会自动的加入一个构造函数,如果用户自己定义构造函数的话,编译器就不会在加入默认的构造函数了,构造函数可以定义在类内部,也可以定义在类的外部,构造函数的特殊要求主要有一下天...
  • 构造函数的目的就是对数据成员进行初始化,构造函数可以在定义也可以在定义,在定义定义一般函数的方法基本一致,在构造函数需要注意的一点就是构造函数没有返回类型。在使用构造函数的时候需要...
  • C++中的构造函数

    2016-10-01 20:44:54
    概念:在每个类中都定义了它的对象被初始化的方式,类通过一个或者几个特殊的成员函数来控制其对象的初始化过 程,这些函数叫做构造函数。 特征:构造函数的名字与类名字相同,构造函数没有返回类型,它有一个...
  • 构造函数:是的一种特殊成员函数,它在每次创建的新对象时执行 ...4.当没有显示声明构造函数的时候,编译器会隐式生成一个默认构造函数 实例: #include<iostream> using namespace std; cl...
  • 个类定义了他的对象被初始化的方式,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数构造函数的任务时初始化类对象的数据成员,无论何时只要是类的对象被创建,就会执行构造...
  • 在c++的类中,构造函数是一种特殊的成员函数,在每次创建创建一个类的时候会默认调用构造函数进行初始化工作。 构造函数用来完成一些必要的初始化工作,有了构造函数之后,就无需再单独写初始化函数,并且也不必担心...
  • 【C++】构造函数&&析构函数

    千次阅读 2016-10-06 16:48:02
    构造函数个类都分别定义了自己的对象被初始化的方式,类通过一个几个特殊的成员函数来控制其对象的初始化过程,这样的函数叫做构造函数构造函数(Constructor)是一种特殊的成员函数,它的名字和类名相同,...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 303
精华内容 121
关键字:

一个类能定义几个构造函数