侯捷C++高级编程(上)

头文件与类的声明

  • 防卫式声明
    防卫式声明

构造函数

  • inline函数
    • 内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。一般来说inline用于定义类的成员函数。
    • inline适用的函数有两种,一种是在类内定义的成员函数,另一种是在类内声明,类外定义的成员函数,对于这两种情况inline的使用有一些不同:
      • 类内定义:可以不用在函数头部加inline关键字,因为编译器会自动将类内定义的函数声明为内联函数
        class temp {
        public:
        	int  amount;
        	//构造函数
        	temp(int amount)
        	{
        		this->amount = amount;
        	}
        
        	//普通成员函数,在类内定义时前面可以不加inline
        	void print_amount()
        	{
        		cout << this->amount;
        	}
        
        }
        
      • 类内声明函数,在类外定义函数;类内声明可以不用加上inline关键字,但是类外定义函数体时必须要加上
    • 优点\缺点
      • 在这里插入图片描述
    • 内联函数和宏定义的区别
      • 在这里插入图片描述
    • 注意事项
      • 在这里插入图片描述

参数传递与返回值

在这里插入图片描述

  • 相同class的各个对象互为友元
    在这里插入图片描述

操作符重载与临时对象

  • 成员函数重载
  • 非成员函数重载
#include<iostream>
using namespace std;
class Number {
public:
    Number operator+(const Number& num) {
        cout << "类内重载" << endl;
        Number sum;
        sum.num1 = num1 + num.num1;
        sum.num2 = num2 + num.num2;
        return sum;
    }
    Number(int a, int b) :num1(a), num2(b) {}
    int num1;
    int num2;
    Number() = default;
};

Number operator+(const Number& num1, const Number& num2) {
    cout << "类外重载" << endl;
    Number sum;
    sum.num1 = num1.num1 + num2.num1;
    sum.num2 = num1.num2 + num2.num2;
    return sum;
}

int main()
{
    Number n1(1, 2);
    Number n2(1, 2);
    Number n3 = n1+n2;
    
    return 0;
}
  • 类内类外同时实现,优先调用类内。
  • 一个函数既可以写成成员函数也可以写成非成员函数。但是对于<<的重载,只能选择非成员函数的形式

复习Complex类的实现过程

三大函数:拷贝构造,拷贝赋值,析构

在这里插入图片描述

  • 类中又指针,类中一定要重写拷贝构造和拷贝赋值。
    • 在这里插入图片描述
  • 下面调用的都是拷贝构造函数
    String s1(s2);
    String s1 = s2;
    

在这里插入图片描述

堆,栈与内存管理

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

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

  • 复数内存细节
    在这里插入图片描述
  • 含有指针的类
    在这里插入图片描述
    在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

扩展补充:类模板,函数模板

static

在这里插入图片描述

  • 类中的static变量只是在类中声明,需要在类外定义

  •  ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/050d04c775d84bf9b5df7c65cee51281.png)
    
  • 单例设计模式

  • ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dab967f86e34497dbf7010c429da9e97.png)
    
  • ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/40c6b3cfd52f45a88de26c0bbd6f20ae.png)
    

cout

  • 在这里插入图片描述

template

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

组合与继承

复合(Composition)

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

委托(Delegation=Composition by reference)

在这里插入图片描述

继承

在这里插入图片描述

  • 父类的析构函数必须要是virtual
    在这里插入图片描述

虚函数与多态

虚函数

  • 函数的继承,继承的是调用权
  • 在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

委托相关设计

Composite设计模式

在这里插入图片描述

Prototype

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值