类和对象

来源:互联网 发布:sms水动力学软件 编辑:程序博客网 时间:2024/06/15 02:55

关于C++的一系列学习,不断更新,直到整个C++内容完结。

类是对象的类型,对象是类的实例。

类:电脑
对象:苹果电脑,联想电脑,华硕电脑。
对象的属性:品牌,制造商,内存大小,磁盘大小等。
对象的行为:上网,看视频,发邮件等。

int 是1,2,3的数据类型,1,2,3是int 类型的变量。

一个类里有数据成员,成员变量,静态数据成员,非静态数据成员。

数据成员:用来区分同一个类的不同对象,比如类中有 int a,int b,

静态成员:描述整个类的特征。非静态成员:描述不同对象的特征。

成员变量可以是各种类型:简单类型‘指针、引用、复合类型、其他类。

常量成员:必须在创建一个对象的时候,初始化它的常量成员,且常量成员的值不能修改。

成员函数:用来操作一个类的对象的函数,叫做成员函数。

静态成员函数:属于整个类的成员函数。

把类的数据成员对外隐藏,使之从外部不可见,称为信息隐藏

成员函数是给外部的访问接口。

一般来数,成员变量为私有(private),成员函数为公有(public)。外部只能通过公有的成员函数才能访问对象,则把对象的私有数据保护起来了。这种方式就是“封装”

成员函数:基本的有,构造函数,析构函数,get函数,set函数。

   


(构造函数)

声明对象时,将自动调用构造函数。

构造函数必须公有,因为如果不是公有,就不能调用初始化了。

函数名和类名一样。

没有返回值。

构造函数可以接收参数。

(默认构造函数)

默认构造函数,不是说构造函数一定没有参数,而是说调用时可以不传参

一个类可以有多个重载的构造函数,靠不同的参数列表来区分。

当中,一定有一个且只能有一个默认构造函数。也就是说创建对象时不需要向构造函数传参。包括两种情况:1.构造函数本身无参数;2.构造函数有参数,但参数都有默认值

如果程序员一个构造函数都没写,编译器将提供一个空的默认构造函数,它不会对数据成员初始化。对于每个类都写一个默认构造函数,是程序员的一个好习惯。

一旦程序员提供了构造函数,编译器将不提供默认构造函数。


定义对象时参数的个数,要和构造函数参数的个数匹配

什么情况下可以不写默认构造函数?创建对象时必须传递参数,且类定义时有参数个数与之匹配的构造函数。

什么情况下可以有两个默认构造函数?两个默认构造函数一个无参,一个有参且有默认值,创建对象时必须传递参数。

以下两个构造函数可以声明在同一时间吗?

Thing ( int 1=7,int 2=5) { x = int 1; y=int 2;}

Thing ( ){ x=1;y=1;}

不可以,会产生二义性,即使能区分也不建议这样写。

以下两个构造函数可以声明在同一时间吗?

Thing ( int 1,int 2){ x = int 1; y=int 2;}

Thing (){ x=1;y=1;}

可以。

Thing ( int int1,  intint2){ x = int1; y=int2;}

Thing ( int int1=7,intint2=5){ x = int1; y=int2;}

不!第一个是2个参数的构造函数,第二个是一个默认的构造函数。参数列表是一样的。编译器错误。

(重载构造函数)

重载构造函数必须有不同的参数列表。

仅仅返回值不同,是不可以的。

int f(int,int)      // O.K.

int f(float,float,float)

int   f(int,int)    // O.K.

float f(int,int)    // illegal



构造函数与成员初始化部分

在构造函数的函数头,对类的成员变量进行初始化。

:成员变量(赋给成员变量的值)

赋给成员变量的值:构造函数的参数or常数。

Thing::Thing(intx, int y) //:member1(x) , member2 (y)  {}

{

      member1= x;

      member2 =y;

}

//两种方式作用相同,

初始化列表优势

1.效率高 

2.有一些类型的成员变量,只能用初始化列表的方式初始化,如const引用。



复合类:复合类的成员变量,是另一个类的对象。




在函数定义时,使用const的三种方法。

(1)函数返回值const引用,即函数的返回值不能修改。

  const int & func(int); //一个函数,返回一个常数int参考

  const int & a = func(5);//将返回值赋给另一个const引用才有意义

(2)函数的参数时const引用,函数体内不能修改参数的值。

  int func (constint&); //一个函数,它接受一个恒定的参考参数

(3)const成员函数(只限于类的定义)

  int func(int) const{}; //成员函数不能修改成员变量的值。

                                  //常量对象必须调用常量成员函数

For example:

         const int& func( const int& ) const


(析构函数)

收回构造函数时申请的资源,垃圾回收

3种情况会调用析构函数。

离开对象的作用域

销毁对象。

删除一个指向对象的指针。

e.g.    ~Circle( )

析构函数的特点:

1.无返回值。

2.无参。

3.唯一。

4.公有

动态分配内存时,必须显示的销毁分配的上的空间,用delete回收指针指向的内存空间,避免内存泄漏。非常重要。




类和对象的主要内容就讲完了,下次讲的是使用类。

有什么建议的欢迎评论讨论,觉得好的也可以赞一个。







0 0
原创粉丝点击