2019年竞赛部&秘书部第5次软件培训

面向对象的基本概念

1.类

一些具有共性的事物,把共性集合在一起抽象出来的概念。
数据 + 行为。数据用来描述对象的性质,状态。行为描述对象的行为。

2.对象

抽象的概念它实体的反馈
是类的实体,这个实体将拥有具体的数据,能够执行具体的行为

3.对象和类

类是创建对象的模板,有了一个类以后,就可以创建这个类的对象,然后操作对象

在这里插入图片描述

4.接口、实现和消息传递

• 类的接口由对外公开的操作和属性构成。它规定了我们能向特定的对象发出什么请求。
• 类的实现主要由操作代码构成。
• 向对象发出请求让它执行某个操作或询问对象本身的状态,称为向对象发送消息。

5.信息隐藏和实现隐藏

信息隐藏:从外部看不到对象内部信息
实现隐藏:从外部看不到内部的实现步骤
所以提高了安全性

6.继承

继承允许在已有类的基础上定义新类(派生类),
派生类自动拥有已有类(基类)的属性和操作;
派生类可以增加自己特有的功能,也可以修改继承得到的功能(覆盖)。
软件重用思想

7.多态性

类的多态性是指在一般类中定义的属性或行为,被特殊类
继承之后,可以具有不同的数据类型或表现出不同的行为。
静态多态:通过函数重载、运算符重载或模板实现。
动态多态:通过类的继承关系和虚函数机制实现。

类和对象的定义和使用

1.类和对象的定义和引用

类的定义一般包括两个部分:声明部分和实现部分。
class <类名> 
{
 public: <数据成员或成员函数的声明>
 protected: <数据成员或成员函数的声明> 
private: <数据成员或成员函数的声明> 
};
	
• 类的实现主要是指类的成员函数的定义;
• 类的成员函数定义可在类体外进行,也可在类体内进行;
• 类定义中声明的数据成员和成员函数都具有类作用域;
• 在类体外定义成员函数时,需用类名加域运算符“::”进行限定;~

例如:
在这里插入图片描述

下面是把display的定义写在类外面,但必须在类内声明并且在类外使用域运算符

在这里插入图片描述

2.构造函数

刚刚举例的代码里有个毛病
我们发现渣男没有被初始化,可以由客户程序员
去定义一个函数去初始化,但是很麻烦,
所以类有构造函数
构造函数在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
构造函数是类中一个特殊的成员函数,其语法形式为:
ClassName(<形参表>)
 {   ...  
}    
或者
 ClassName::ClassName(<形参表>)
 {   ...  
}   

举例
在这里插入图片描述在这里插入图片描述在这里插入图片描述
构造函数特点
① 构造函数的函数名必须与类名相同
② 不能指定构造函数返回值的类型
③ 构造函数可以重载
④ 构造函数由系统调用
⑤ 构造函数一般是公有的或保护的成员函数
⑥ 若没有定义构造函数,系统会提供一个默认构造函数

3.类和对象的定义和引用

对象成员的引用:
一种方法:
  	对象名. 成员名
另一种方法:
  	指针变量->成员名

4.常数据成员

• 在类中用const限定的数据成员为常数据成员; 
• 常数据成员只能在构造函数的初始化列表中初始化; 
• const数据成员的值在对象的整个生命周期中都不会发生变化。

5.函数成员

• 将一个成员函数的声明用const进行限制,能保证对象 的常量性;
• 常对象不能调用无const修饰的成员函数。 
• 常对象可以调用其 const成员函数。 
• 成员函数的实现部分也要带有const关键字。

在这里插入图片描述

非常对象可以调用其 const成员函数。 
常成员函数的实现部分也要带有const关键字。

6.友元函数

友元函数不是类的组成部分,但必须在被访问的类内说明,
一般在类外定义,一般格式为	
friend <类型名> 友元函数名(形参表); 
注意:
友元函数的说明可以出现在类的任何地方
友元函数可以访问该类中的所有成员
友元关系不具有交换性和传递性
应谨慎使用友元函数

在这里插入图片描述

在这里插入图片描述

类的继承

继承和派生

1.保持已有类的特性而构造新类的过程称为继承,在已有类的基础上新增自己的特性而产生新类的过程称为派生。      
2.基类(父类)和派生类 ( 子类 能够派生出其它类的类称为基类(父类),从基类派生出的新类称为派生类(子类)
3.单一继承和多重继承 当一个类仅由一个基类派生时,称为单一继承;当 一个类由多于一个基类派生时,称为多重继承

C++访问控制权限

在这里插入图片描述

公有继承

1.基类的所有成员在派生类中保持各个成员的访问权限不变;
2.派生类中的成员函数可以直接访问基类中的public和 protected成员,但不能直接访问基类的private成员;
3.公有派生类继承了基类的接口,能够发送给基类对象的消息派生类对象也可以接收
class A
{
      int x;//不写访问权限默认是私有 
protected:
      int y;
public:
      int z;
      A(int a, int b, int c) {
            x = a; y = b; z = c;
      }
      int Getx() {
            return x;
      }
      int Gety() {
            return y;
      }
      void ShowA() {
      cout << x <<" " << y << " " << z << endl;
      }
};


class B :public A
{
      int Length, Width;
public:
      B(int a, int b, int c, int d, int e) :A(a, b, c) {
            Length = d; Width = e;
      }
      void ShowB() {
      cout << Length << " " << Width<< endl;
      cout << Getx() << " " << y <<" " << z << endl;
      }
      int Sum() {
            return (Getx() + y + z + Length + Width);
      }
};
int main(void) {
      B b1(1, 2, 3, 4, 5);
      b1.ShowA();
      b1.ShowB();
      cout << "Sum=" << b1.Sum() << endl;
      cout << "y=" << b1.Gety() << endl;
      cout << "z=" << b1.z << endl;
      return 0;
}

私有继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

保护继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

派生类对象的创建和撤销

在这里插入图片描述

赋值兼容规则

在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

派生类对基类的修改

在这里插入图片描述

多重继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值