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 }
  • 相关阅读:
    Error Boundaries 错误边界
    判断机型
    iframe
    C#中静态方法和非静态方法的区别
    C#制作ActiveX控件中调用海康SDK的问题
    C# 程序集
    web deploy 部署网站
    C# 提取PPT文本和图片的实现方案
    C#调用webservice
    C#中四步轻松使用log4net记录本地日志
  • 原文地址:https://www.cnblogs.com/tiantiantian-dianzi/p/5655385.html
Copyright © 2011-2022 走看看