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

原创 2007年10月01日 15:12:00

  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.
 

相关文章推荐

C++中拷贝构造函数的使用

  • 2012年07月29日 08:56
  • 275KB
  • 下载

拷贝构造函数

  • 2014年03月10日 22:22
  • 35KB
  • 下载

在C++拷贝构造函数中使用初始化列表

今天同事遇到一个关于拷贝构造函数的问题。代码大致如下: class test { public: test( size_t size ) { v.assign( size, 1 );...

C++拷贝构造函数和赋值操作

  • 2012年01月10日 13:51
  • 3KB
  • 下载

C++什么样的类需要编写拷贝构造函数

转载:http://blog.csdn.net/keyouan2008/article/details/5773031 1-什么时候会用到拷贝构造函数?  2-什么时候有必要手动写拷贝构造函数? ...
  • memewry
  • memewry
  • 2012年07月31日 14:24
  • 1042

拷贝构造函数..........

  • 2008年09月11日 23:26
  • 3KB
  • 下载

析构函数和拷贝构造函数

  • 2012年08月30日 13:16
  • 131KB
  • 下载

c++类中系统默认拷贝构造函数的解析

我们在定义了一个c++类后, 如果我们自己没有写拷贝构造函数 , 那么系统就会系统一个默认的拷贝构造函数 , 但如果我们类中存在指针等地址变量时 , 就会发生意想不到的结构: 代码1、调用系统拷贝构...

C++类中拷贝构造函数详解

a. C++标准中提到“The default constructor, copy constructor and copy assignment operator, and destructor a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类初始化 构造函数 拷贝构造函数
举报原因:
原因补充:

(最多只允许输入30个字)