关闭

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

659人阅读 评论(0) 收藏 举报

  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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:107857次
    • 积分:1606
    • 等级:
    • 排名:千里之外
    • 原创:47篇
    • 转载:18篇
    • 译文:0篇
    • 评论:16条
    最新评论