码迷,mamicode.com
首页 > 其他好文 > 详细

类与类的初始化

时间:2014-07-26 14:18:07      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   os   strong   io   

面向对象(Object-Oriented):是一种按照人们认识客观世界的思维方式,采用基于对象(实体)的概念建立抽象的模型,模拟客观世界分析、设计、实现软件的方法。

 

类(Class):具有相同属性、操作的抽象的集合。

类的成员:

类包括成员变量成员函数,其具有3种属性私有(private)、公有(public)和保护(protected)。

private:只能被该类中的函数访问,被友元函数访问;

  不能被任何其他访问,该类的对象也不能访问。

public:可以被该类的函数、子类的函数、友元函数访问,也可以被该类的对象访问。

protected:可以被该类的函数、子类的函数、友元函数访问。

  不能被该类的对象访问。

 

类的创建及初始化:

创建类时要对类进行声明和定义。

构造函数(Constructors):是一种特殊的成员函数。主要用来在创建对象时初始化对象。

  构造函数唯一的语法限制是不能指定返回类型。构造函数名与类名同名。

  构造函数包括默认构造函数、拷贝构造函数

默认构造函数(Default Constructor):在类未提供显式打的初始化值时,被用来创建对象的构造函数,默认构造函数无参数。

  当且仅当没有定义任何构造函数时,编译器才会提供默认的构造函数,为类定义了构造函数(有参数)后,则必须为它提供显式默认的构造函数。

  给已有的构造函数的所有参数提供默认值。

 

bubuko.com,布布扣
 1 # ifndef _NUMBER_H_
 2 # define _NUMBER_H_
 3 
 4 class Number
 5 {
 6     public:
 7         Number(int a = 0, double b = 0.0);
 8 //        Number(int , double );
 9 //        Number();
10     protected:
11     private:
12         int number_a;
13         double number_b;
14 };
15 
16 # endif // _NUMBER_H_
number.h
bubuko.com,布布扣
 1 # include "number.h"
 2 
 3 Number::Number(int a, double b)
 4 {
 5     number_a = a;
 6     number_b = b;
 7 }
 8 
 9 //Number::Number()
10 //{
11 //    number_a = 0;
12 //    number_b = 0.0;
13 //}
number.cpp
bubuko.com,布布扣
1 # include <iostream>
2 # include "number.h"
3 
4 int main()
5 {
6     Number a(1, 1.1);
7     Number b;
8     return 0;
9 }
main.cpp

 

result:

0 errors, 0 warnings  

  通过重载来定义另一个构造函数。

bubuko.com,布布扣
 1 # ifndef _NUMBER_H_
 2 # define _NUMBER_H_
 3 
 4 class Number
 5 {
 6     public:
 7 //        Number(int a = 0, double b = 0.0);
 8         Number(int , double );
 9         Number();
10     protected:
11     private:
12         int number_a;
13         double number_b;
14 };
15 
16 # endif // _NUMBER_H_
number.h
bubuko.com,布布扣
 1 # include "number.h"
 2 
 3 Number::Number(int a, double b)
 4 {
 5     number_a = a;
 6     number_b = b;
 7 }
 8 
 9 Number::Number()
10 {
11     number_a = 0;
12     number_b = 0.0;
13 }
number.cpp
bubuko.com,布布扣
1 # include <iostream>
2 # include "number.h"
3 
4 int main()
5 {
6     Number a(1, 1.1);
7     Number b;
8     return 0;
9 }
main.cpp

result:

0 errors, 0 warnings

 

拷贝构造函数(Copy Constructor):是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。

  拷贝构造函数是由普通构造函数和赋值操作符共同实现的。

  如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会自动生成一个来进行对象之间非static成员的位拷贝。这个隐含的拷贝构造函数简单的关联了所有的类成员。

在C++中,下面三种对象需要调用拷贝构造函数:

  1. 一个对象作为函数参数,以值传递的方式传入函数体。
  2. 一个对象作为函数返回值,以值传递的方式从函数返回。
  3. 一个对象用于给另一个对象进行初始化。

 

bubuko.com,布布扣
 1 # ifndef _NUMBER_H_
 2 # define _NUMBER_H_
 3 
 4 class Number
 5 {
 6     public:
 7 //        Number(int a = 0, double b = 0.0);
 8         Number(int , double );
 9         Number();
10         Number(const Number &);
11         int getNumber_a();
12         double getNumber_b();
13     protected:
14     private:
15         int number_a;
16         double number_b;
17 };
18 
19 # endif // _NUMBER_H_
number.h
bubuko.com,布布扣
 1 # include "number.h"
 2 
 3 Number::Number(int a, double b)
 4 {
 5     number_a = a;
 6     number_b = b;
 7 }
 8 
 9 Number::Number()
10 {
11     number_a = 0;
12     number_b = 0.0;
13 }
14 
15 Number::Number(const Number & num)
16 {
17     number_a = num.number_a;
18     number_b = num.number_b;
19 }
20 
21 int Number::getNumber_a()
22 {
23     return number_a;
24 }
25 
26 double Number::getNumber_b()
27 {
28     return number_b;
29 }
number.cpp
bubuko.com,布布扣
 1 # include <iostream>
 2 # include "number.h"
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     Number a(1, 1.1);
 8     Number b(a);
 9     cout << a.getNumber_a() << " , "
10         << a.getNumber_b() << endl;
11     cout << b.getNumber_a() << " , "
12         << b.getNumber_b() << endl;
13     return 0;
14 }
main.cpp

 

result:

1 , 1.1
1 , 1.1

 

析构函数(Destructor):也是一种特殊的成员函数,它的作用与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已经调用完毕),系统自动执行析构函数。

  析构函数名也应与类名相同,只是在函数名前加一个取反符"~",以区别于构造函数。

类与类的初始化,布布扣,bubuko.com

类与类的初始化

标签:des   style   blog   http   color   os   strong   io   

原文地址:http://www.cnblogs.com/blank031x/p/3869852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!