C++ —— C++类

C++ ——

 

1、类

       类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。

class Clock
{
public:
  void SetTime(int new_hour, int new_minute,int new_second);
  void ShowTime();
private:
  int hour, minute, second;
};

(1)利用类可以实现数据的封装,隐藏,继承与派生。

封装:将抽象出的数据成员、代码成员相结合,将它们视为一个整体。目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的{}

(2)利用类易于编写大型复杂程序,其模块化程度比采用函数更高。

  函数:将逻辑上相关的语句与数据封装,用于完成特定的功能;

  类:将逻辑上相关的函数与数据封装,对所要处理的问题进行描述。

(3)类是C++程序设计的核心成分,是C++封装的基本单元,它把数据和函数封装在一起。

 

2、类的构成

class类名标识符
{
public:
  // 公有成员(外部接口)
protected:
  // 保护成员
private:
  // 私有成员
};

(1)关键字class表示类,类名标识符一般首字母用大写字母表示,以示与对象名的区别。(2)类的成员分为两类:数据成员和成员函数。

(3)public、protected、private访问控制

private(私有成员):只允许类内部的成员访问,任何本类以外的成员(对象)均不能访问。

public(公有成员):它们是类与外部的接口,任何外部函数都可以访问公有成员。

protected(保护成员):与private类似,其差别表现在继承与派生时对派生类的影响的不同。

 

3、成员函数

(1)成员函数与普通函数

       成员函数属于类,成员函数定义是类设计的一部分,其作用域是类作用域,而普通函数一般为全局函数。

       成员函数的操作主体是对象,使用时通过捆绑对象来行使其职责,而普通函数被调用时没有操作主体

(2)类中定义成员函数

       成员函数的定义代码可以放在类定义中。类中定义的成员函数的规模一般都比较小,语句只有1~5句。在类中定义的成员函数默认为内联函数,即使没有明确用inline标示。在C++中,类定义通常在头文件中,因此这些成员函数定义也伴随着进入头文件,而内联函数是可以放在头文件中的。

(3)类后定义成员函数

       将类定义和其成员函数定义分开,是目前开发程序的通常做法。

       把类定义(头文件)看成是类的外部接口;类的成员函数定义看成是类的内部实现(源文件)。

    返回类型类标识符::成员函数名(参数表)
    {}

    其中::是作用域区分符。

如:voidA::Set(int a,int b){}      

(4)重载成员函数

       同一个类的成员函数可以重载,方法与非成员函数重载相同。不同类的成员函数同名,不是函数重载。类的成员函数与非成员函数同名,不是函数重载。

 

4、调用成员函数

(1)必须通过对象去调用,要指定对象和成员名,否则无意义。

       格式:对象名.成员

(2)类类型作为一个构造类型,不但可以定义对象,而且可以定义对象指针或对象引用。

(3)this指针

       this指针是C++实现封装性的一种机制。程序运行时,系统自动为每个对象提供一个this指针,该this指针接受当前对象的地址,所有对成员的访问都被隐含地加上前缀:this->。

如month=m;等价于this->month=m;

       无论哪个对象调用,成员函数从获得的参数(显式的和隐含的)来判断都清楚,所以成员函数中访问成员无需对象名作前缀。

 

桥接模式是一种结构型设计模式,它将抽象和实现分离,使它们可以独立地变化。桥接模式的核心思想是将一个大或一组分解成抽象和实现两个独立的维度,使它们可以独立地变化和扩展,同时通过桥接来将它们连接起来。 在C++中,桥接模式通常通过虚函数实现。抽象部分通过基定义接口,而实现部分通过派生实现具体的功能。通过将抽象部分的指针作为参数传递给实现部分的函数,就可以实现两个部分的连接。 下面是一个简单的桥接模式的C++示例: ```c++ class Implementor { public: virtual void operation() = 0; virtual ~Implementor() {} }; class ConcreteImplementorA : public Implementor { public: void operation() override { // 具体的实现A } }; class ConcreteImplementorB : public Implementor { public: void operation() override { // 具体的实现B } }; class Abstraction { public: Abstraction(Implementor* implementor) : m_implementor(implementor) {} virtual void operation() = 0; virtual ~Abstraction() {} protected: Implementor* m_implementor; }; class RefinedAbstraction : public Abstraction { public: RefinedAbstraction(Implementor* implementor) : Abstraction(implementor) {} void operation() override { m_implementor->operation(); // 其他操作 } }; int main() { Implementor* implementorA = new ConcreteImplementorA(); Implementor* implementorB = new ConcreteImplementorB(); Abstraction* abstractionA = new RefinedAbstraction(implementorA); Abstraction* abstractionB = new RefinedAbstraction(implementorB); abstractionA->operation(); abstractionB->operation(); delete abstractionA; delete abstractionB; delete implementorA; delete implementorB; return 0; } ``` 在上面的示例中,Implementor是实现部分的抽象基,ConcreteImplementorA和ConcreteImplementorB是具体的实现。Abstraction是抽象部分的基,RefinedAbstraction是抽象部分的具体实现。在main函数中,我们创建了不同的Implementor和Abstraction对象,并通过它们来完成不同的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值