C++中的构造函数

2020-05-14  本文已影响0人  潘雪雯

C++中构造函数有三类

Test2() //无参数的构造函数 
        {
            m_a = 0;
            m_b = 0;
            cout<<"无参构造函数"<<endl;
        }
  1. 代码形式
Test2(int a)
        {
            m_a =a;
            m_b = 0;
            cout<<"有参构造函数1"<<endl;
        }
        Test2(int a,int b) //无参数的构造函数 
        {
            m_a = a;
            m_b = b;
            cout<<"有参构造函数2"<<endl;
        }
  1. 调用有参构造函数的三种方式:
    2.1) 括号法
Test2 t1(1,2);

2.2) 等号法

Test2 t2 = (3,4);

2.3) 直接调用构造函数或者程序员手工调用产生一个对象

Test2 t3 = 5;
  1. 代码
//赋值构造函数 copy构造函数 
        Test2(const Test2& obj) //无参数的构造函数 
        {
            cout<<"我也是构造函数"<<endl;
        }
  1. 调用拷贝构造函数的方法:
    2.1) 定义变量并初始化括号法
Test2 t6(t1);

2.2) 定义变量并初始化,初始化法

Test2 t5 = t1;

2.3) 匿名对象初始化另外一个同类型的对象,直接把匿名对象转成t6,即匿名变有名不会被析构掉

Test2 t6 = Test2();

2.4) 匿名对象赋值给另外一个同类型的对象,然后匿名对象析构

Test2 t2(1,2);
t2 = Test2();

深拷贝和浅拷贝

浅拷贝:两个指针变量指向同一块内存空间.当析构函数把obj2的内存空间析构之后,obj1就变成野指针。

//构造函数
Name(const char *myp)
{
    m_len = strlen(myp); 
    m_p = (char *)malloc(m_len +1);
    strcpy(m_p,myp);
}
//调用构造函数
Name obj2 = obj1; 

深拷贝:自己写拷贝构造函数

Name(const Name& obj1)
{
    m_len = obj1.m_len;
    m_p = (char *)malloc(m_len +1);
    strcpy(m_p,obj1.m_p);
}
image.png
void Stock::update(double price)

这种表示法意味着定义的update()函数是Stock类的成员。这不仅将update()标识为成员函数,还意味着可以将另一个类的成员函数也命名为update(),因此,作用域解析运算符确定方法定义对应类的身份。

  1. 声明的私有成员只能通过成员函数进行访问。
  2. 为了避免参数名与类成员相同,则在数据成员名中使用m_前缀或者在成员名中使用后缀_
  3. 构造函数用来创建对象,而不是通过对象来调用
上一篇 下一篇

猜你喜欢

热点阅读