类初始化 构造函数 拷贝构造函数

  1.类里面的任何成员变量在定义时是不能初始化的。  
  2.一般的数据成员可以在构造函数中初始化。  
  3.const数据成员必须在构造函数的初始化列表中初始化。   because const members may only be initialized, never assigned.因为const类型只能初始化而不能赋值。
  4.static   要在类的定义外面初始化。  

c++ Explicit Initialization( 显式初始化 ) 的两种方法:
1. type-name  name( initializer1, initializer2, ... initializer)
调用类构造函数(不一定是默认构造函数)

什么是默认构造函数?

“默认构造函数”是能够被 无参数调用 的构造函数。

在定义类时,如果没有定义构造函数,则当需要构造函数时,编译器将自动生成一个不带参数的构造函数,此构造函数成为默认构造函数。但如果用户为类定义了构造函数(不一定是默认构造函数,默认构造函数必须满足能够被无参数调用),则实例化类对象时将使用用户定义的构造函数,编译器不会生成构造函数。

定义类构造函数列表初始化的几种形式:

class B;
class A : public BaseClass
{
 private:
       int value1;
       int value2;
       B b; 
};
1.     初始化为常量(const)
定义:A() : BaseClass(100,200),value1(50),value2(50),b(10,10){};
调用:A a;  (无参数调用,是默认构造函数)
2.   参数赋初值
A(int i=1,n=2):value1(i),value2(n){};
调用:A a;  (无参数调用,是默认构造函数)
A a(3,4);或
int x=7,y=8; A a(x,y);
3.     利用参数列表初始化(非常量)
A(int i,int n,int m,int k) : BaseClass(i,n),value1(m),value2(k),b(n,m){};
调用:A a(1,2,3,4);或
int x=2,y=1,z=7,w=8; A a(x,y,z,w);
调用A a;将出错,不是默认构造函数。

    上面写成BaseClass(100,200),BaseClass(i,n),说明了类BaseClass构造函数的形式为带有两个参数。

2. type-name name = value

调用拷贝构造函数
拷贝构造函数定义形式:
class-name(class-name&);Can accept a single argument of reference to same class type
(注意不是name = value,这是赋值运算,不是初始化,它调用operator=)
默认拷贝构造函数和默认operator=带来的问题:
1。lose memory, the memory that some pointer point to was never deleted
2.  will delete the memory still pointed to by other pointer.
the solution:Declare a copy constructor and an assignment operator for classes with dynamically allocated memory.
 
Explicitly disallow use of implicitly generated member functions you don't want.
 
The solution is to declare the function, operator= in this case, private. By declaring a member function explicitly, you prevent compilers from generating their own version, and by making the function private, you keep people from calling it.
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值