类与对象学习总结

本文详细介绍了C++中类的定义与使用,包括类的属性与行为、成员函数、对象的概念及其创建过程。深入探讨了构造函数与析构函数的作用及调用时机,以及复制构造函数的特点和调用场景。此外,还讲解了常成员、静态成员和友元等特殊成员的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、
1.  类的定义

(1)类是对具有相同属性和行为的一组对象的抽象与统一描述。是用户自定义的数据类型

(2)类的定义包括行为和属性两个部分。

(3)属性以数据表示,行为通过函数实现。

2.C++类定义的格式

class  类名
{
   public:
   protected:
   private:           私有数据成员和成员函数;
}
   各成员函数的实现;

3.注意事项

(1)类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。

 (2)类定义必须以分号“;”结束。

 (3)类与结构体的区别:没有明确指定类成员的访问权限时,C++结构体的成员是公有的,而类的成员是私有的。

4.成员函数

类的成员函数是实现类的行为属性的成员。

一般将成员函数声明为函数原型,在类外具体实现成员函数。

返回值类型  类名::成员函数名(参数表)

{

          函数体

}
5.对象

(1)对象是类的实例或实体。

(2)类与对象的关系,如同C++基本数据类型和该类型的变量之间的关系。
6.类成员的访问

对象成员的访问包括:

       ●圆点访问形式:对象名.公有成员

       ●指针访问形式

示例:

#include<iostream>

using namespace std ;

int  max ( int a , int b );

int  max ( int a , intb,  int c ) ;

int main ()

 { cout << max ( 5, 3 ) << endl ;

    cout << max (4, 8, 2 ) << endl ;

 }

int  max ( int a , int  b )

 { return a > b ? a : b ;  }

int  max ( int a , int  b,  int  c )

 { int t ;

    t =max ( a ,  b ) ;

    return  max ( t ,  c ) ;

 }

二、

1.Ø构造函数是用于创建对象的特殊成员函数

     当创建对象时,系统自动调用构造函数

Ø构造函数的作用是:

      为对象分配空间;对数据成员赋初值;请求其他资源

Ø  没有用户定义的构造函数时,系统提供缺省版本的构造函数
Ø 构造函数名与类名相同:类名
Ø  构造函数可以重载
Ø  构造函数可以有任意类型的参数,但没有返回类型
2.Ø析构函数是用于取消对象的成员函数

     当一个对象作用域结束时,系统自动调用析构函数

Ø析构函数的作用是进行对象消亡时的清理工作
Ø没有用户定义析构函数时,系统提供缺省版本的析构函数
Ø析构函数名为:~ 类名

Ø析构函数没有参数,也没有返回类型
示例:

为类Date建立一个构造函数。

#include <iostream.h>

class Date {

   public:

      Date();     // 无参构造函数

      Date(int y,int m,int d);

      void showDate();

   private:

            int year, month, day;

   };

Date::Date()    // 构造函数的实现

{  year=0; month=0;day=0; }

Date::Date(inty,intm,intd)

{ year=y; month=m; day=d; }

inline void Date::showDate()

cout<<year<<"."<<month<<"."<<day<<endl;}

3.this指针

需要显式引用this指针的三种情况

1)在类的非静态成员函数中返回类对象本身对象的引用的时候,直接使用return*this,返回本对象的地址时returnthis

2)当参数与成员变量名相同时,如this->x= x,不能写成x = x

3)避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。
三、

1.复制构造函数的特点
a)复制构造函数名与类名相同,并且也没有返回值类型。
b)复制构造函数可写在类中,也可以写在类外。
c)复制构造函数要求有一个类类型引用参数。
d)如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构造函数。
2.复制构造函数的调用

以下三种情况下由编译系统自动调用:

1.声明语句中用类的一个已知对象初始化该类的另一个对象时。
2.对象作为一个函数实参传递给函数的形参时,需要将实参对象去初始化形参对象时,需要调用复制构造函数。

3.对象是函数的返回值时,由于需要生成一个临时对象作为函数返回结果,系统需要将临时对象的值初始化另一个对象,需要调用复制构造函数。
3.类的其他成员

四、 类定义中除了一般指定访问权限的成员,还可以定义各种特殊用途的成员。

  常成员

  静态成员

  友元

1.常数据成员

       使用const说明的数据成员称为常数据成员。

       如果在一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,而任何其他函数都不能对该成员赋值。

2.静态成员

Ø类成员冠以static声明时,称为静态成员。
Ø 静态数据成员为同类对象共享。

Ø 静态成员函数与静态数据成员协同操作。 

1)静态成员函数在类外定义时不用static前缀。

2静态成员函数主要用来访问同一类中的静态数据成员

  (3)   私有静态成员函数不能在类外部或用对象访问。

4)可以在建立对象之前处理静态数据成员。

5)编译系统将静态成员函数限定为内部连接(在其他文件中不可见)

6)静态成员函数中是没有this指针的。

7)静态成员函数不访问类中的非静态数据成员。如有需要,只能通过对象名(或指向对象的指针)访问该对象的非静态成员。

3.友元函数

如果在本类A以外的其他地方定义了一个函数函数B
这个函数可以是不属于任何类的非成员函数,
也可以是其他类的成员函数,
在类体中用friend对其函数B进行声明,此函数就称为本类A的友元函数。

友元函数函数B可以访问这个类A中的私有成员
4.对象数组的初始化

(1)当对象数组所属的类中包含带参的构造函数,可用初始化列表完成对象数组的初始化。

(2)当对象数组所属的类中包含无参的构造函数,也可以先定义,再给每个数组元素赋值。

(3)当对象数组所属的类中包含单个参数的构造函数,可简写。
示例:

#include <iostream>

#include <string>

using namespace std;

class Person{

  stringname;

public:

  Person(stringa_name)

  {name=a_name;cout<<name<<"says hello!"<<endl;}

  ~Person()

  cout<<name<<"says goodbye!"<<endl}

};
感想:C++越往后越学越难,前半部分类的定义部分还好理解,从this指针开始就觉得听不懂了,后边到定义学生信息,只能把前面的成员函数定义出来,但并不清楚怎么进一步进行调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值