zoukankan      html  css  js  c++  java
  • 关于c++构造函数

    1 构造函数是特殊的成员函数,一般声明为公有的
    2 创建类类型的新对象,系统自动会调用构造函数,而且只调用一次,不允许人工调用
    3 构造函数是为了保证对象的每个数据成员都被正确初始化
    函数名和类名完全相同
    不能定义构造函数的类型(也不能有返回类型),也不能使用void
    通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用
    构造函数被声明为私有有特殊的用途。
    构造函数可以有任意类型和任意个数的参数,一个类可以有多个构造函数(重载)
    构造函数形参的名字和类中成员的名字不能定义成相同的

    关于析构函数的总结:

    1 函数名和类名相似(前面多了一个字符“~”)
    2 没有返回类型
    3 没有参数
    4 析构函数不能被重载
    5 如果没有定义析构函数,编译器会自动生成一个默认析构函数,其格式如下:
    类名::~默认析构函数名( )
    {
    }
    6 默认析构函数是一个空函数。

     1 例子1:
     2 class Test
     3 {
     4 public:
     5     // 如果类不提供任何一个构造函数,系统将为我们提供一个不带参数的
     6     // 默认的构造函数
     7     Test();
     8 private:
     9     int num_;
    10 };
    11 
    12 // 不带参数的构造函数称为默认构造函数
    13 Test::Test()
    14 {
    15     num_ = 0;
    16     cout<<"Initializing Default"<<endl;
    17 }
     1 例子2:
     2 class Test
     3 {
     4 public:
     5     // 如果类不提供任何一个构造函数,系统将为我们提供一个不带参数的
     6     // 默认的构造函数
     7     //Test();
     8     Test(int num);
     9     void Display();
    10 
    11 private:
    12     int num_;
    13 };
    14 
    15 Test::Test(int num)
    16 {
    17     num_ = num;
    18     cout<<"Initializing "<<num_<<endl;
    19 }
    20 
    21 void Test::Display()
    22 {
    23     cout<<"num="<<num_<<endl;
    24 }
    25 
    26 int main(void)
    27 {
    28     Test t;//这句话的意思就是希望调用1个不带参数的构造函数,而我们已经建了1个带参数的构造函数,系统是不会再给我们1个不带参数的构造函数的
    29     t.Display();
    30     return 0;
    31 }
    32 //这时就会报错 因为我们自己构建了1个带参数的构造函数,系统就不会给我们建一个构造函数
    33 //如果是下面这样调用就不会有错误
    34 int main(void)
    35 {
    36     Test t(10);//新建一个对象
    37     t.Display();
    38     return 0;
    39 }
     1 例子3:
     2 class Test
     3 {
     4 public:
     5     
     6     Test();
     7     Test(int num);//这两个构造函数构成重载
     8     void Display();
     9     ~Test();//析构函数不能够被重载,也就意味着析构函数不能有参数
    10 private:
    11     int num_;
    12 };
    13 
    14 Test::Test()
    15 {
    16     num_ = 0;
    17     cout<<"Initializing Default"<<endl;
    18 }
    19 
    20 Test::Test(int num)
    21 {
    22     num_ = num;
    23     cout<<"Initializing "<<num_<<endl;//这句话是把 Initializing和num_都输出,而不是只输出Initializing
    24 }
    25 
    26 Test::~Test()
    27 {
    28     cout<<"Destroy "<<num_<<endl;
    29 }
    30 
    31 void Test::Display()
    32 {
    33     cout<<"num="<<num_<<endl;
    34 }
    35 
    36 int main(void)
    37 {
    38     Test t;
    39     t.Display();
    40 
    41     Test t2(10);
    42     t2.Display();
    43     return 0;
    44 }
  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/tiantiantian-dianzi/p/5655385.html
Copyright © 2011-2022 走看看