c++ 程序设计 week3

class 基础

1. inline function

两种形式:

(1) 类定义里面实现的函数即为inline function

(2) inline 定义, 实现时开头不用加inline

class A

{

public:

void f1();

inline void f2();

};

void A::f2(){}


2. Member Function Overloading

参数列表不一样即可, 注意默认参数的设置可能会导致二义性


3. Constructor

(1) 默认构造函数对每一个元素调用各自的构造函数.

特点: 无返回值, 可以定义多个

(2) 构造函数与数组: 

需要注意定义该类型本身时,所有元素都会被构造

但是构造指针数组时, 默认为NULL, 不会调用构造函数.

初始化函数可以保证使用元素时, 不会因为没有初始化导致问题.


4. Copy Constructor

T( T &t): 不能用pass by value, 想想也是, 不然会不断调用copy constructor啊.

用途:

(1) 初始化

T a(b);

T a = b;

(2) 函数调用, pass by value

(3) 函数返回值


5. 转换类型构造函数

特点: 只有一个参数

目的: 用于类型的自动转换, 通常会生成一个临时变量, 将右边变量类型转换为左边变量的类型.



6. Destructor

(1) 没有返回值, 也没有参数, 就一个

一般用内存管理, 销毁new产生的空间

默认存在一个缺省构析函数, 不会释放申请的内存.

~T()

(2) 构析函数与数组

一般数组, 程序结束时自动调用

new 数组, 仅在delete []p 时会调用, 不然程序结束也不会调用.

(3) 构析函数与static, global变量的调用顺序

static 变量和global 变量在main函数结束时被销毁, 按后进先出的方式调用构析函数.


7. 静态成员变量和静态成员函数

关键字 static:

理解: 可以认为这是将一个global 变量 放在了类里面. (应为该变量与类密切相关)

(1) 所以当计算类的大小时, 它不会不会被计算进去.

(2) 而且必须在类定义外面对静态成员变量定义或初始化.

不需要再加static 关键词,

int A::count = 1;

(3) 包含类的特性, 与具体的某个实现无关,所以static function 不能使用非static变量.


8. 封闭类和成员对象

当成员对象是一个封闭类时, 必须使用初始化列表进行初始化.

或者要定义封闭类的默认构造函数.

相当于调用默认构造函数, 再用operator=

#include <iostream>
using namespace std;
class Base {
public:
    int k;
    Base(int n = 0):k(n) { }
    Base& operator=(const Base &b){ k = b.k;return *this;};
    Base (const Base &b){k = b.k;};
};
class Big  {
public:
    int v; Base b;
// 在此处补充你的代码
    Big(int v_):v(v_),b(v_){}
    Big(Big &a)
    {
        v = a.v;
        b = a.b;
    }
};
int main()  {
    Big a1(5);    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}

(2)或者使用初始化列表. 相当于直接进行初始化

使用初始化列表

    Big(Big &a):v(a.v),b(a.b){}

注意初始化的顺序,与类内出现的顺序一致, 最后调用整个类的构造函数

构析顺序相反.


9. 友元

友元函数和友元类

friend 开头

class A{

friend void B::f();

}

class A{

friend class B;

}

10. this 指针

方便使用, 与c++转换为c代码有关


11. 常量对象, 常量成员函数, 常引用

常量对象只能使用常量成员函数








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值