欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

听课笔记---程序设计与算法(三)C++面向对象程序设计(郭伟老师)---第一周

程序员文章站 2022-04-24 18:51:53
...

Week1

Contents

  • Reference
  • Inline function
  • Overloaded function
  • Default argument
  • Dynamic memory allocation in C++
  • const qualifier
  • Class and Object—Basic ideas

想法与体悟

  • 引用

    引用可以被视为变量的别名,其行为与常指针T * const相似,但并不需要 * 运算符,应用在函数中可以使得实参处理代码更体面。(见源码 EasySwap.cpp HardSwap.cpp)

    引用也可成为函数返回值类型,此时若T & F(...) {... return n}则等价于 T & F(...)=n(见源码WeirdReturnValur.cpp)

  • 内联函数

    内联函数用以提高程序运行速度。不以压栈形式调用函数,而是使用将函数体代码插入主函数的方式。

  • 函数重载

    同一函数名,参数数量或类型不同,即为重载关系,编译器根据参数自动选择合适的函数。

  • 函数参数缺省值

    在函数中可以对从某一个开始的参数设定缺省值,调用函数时,可以不给出右边一定量的参数。

  • C++的动态内存分配

    new T 分配单个变量, 以 new T[i] 分配数组,均返回指针类型。可用于指针数组的初始化(见源码WeirdInitializeArray.cpp)
    delete P 回收单个变量 以 delete []P 回收数组,同一地址不可delete一次以上,必须delete动态内存

  • const 关键字

    const 关键字用于定义常量,并且可以使用类型判断,这一点上优于#define
    常引用:const T & 不可在引用上改变被引用的值,类似于const T * const

  • 类和对象基础

    类是自定义数据结构,具有成员变量和成员函数。类定义出的变量是类的实例,也就是对象。每个对象有自己的成员变量,所占空间不小于成员变量所占空间之和。一个类中的所有对象共享成员函数,故这部分空间不算在对象所占空间内。

练习源码

EasySwap.cpp

#include<iostream>
using namespace std;

class A
{
    public:
    int x;
    int getX() { return x; }
};

void swap(A & a, A & b)
{
    int tmp = a.x;
    a.x = b.x;
    b.x = tmp;
}

int main()
{
    A a, b;
    a.x = 3;
    b.x = 5;
    swap(a, b);
    cout << a.getX() << "," << b.getX();
    return 0;
}

HardSwap.cpp

#include<iostream>

using namespace std;

void swap(int * & a, int * & b)
{
    int * tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int a = 3, b = 5;
    int * pa = &a;
    int * pb = &b;
    swap(pa, pb);
    cout << *pa << "," << *pb;
    return 0;
}

WeirdInitArray.cpp

#include<iostream>

using namespace std;

int main()
{
    int * a[] = {NULL, NULL, new int[1], new int[6], NULL};

    *a[2] = 123;
    a[3][5] = 456;
    if (! a[0]) {
        cout << *a[2] << "," << a[3][5];
    }
    return 0;
}

WeirdReturnValue.cpp

#include<iostream>

using namespace std;

int & getElement(int * a, int i)
{   
    return a[i];
}

int main()
{
    int a[] = {1, 2, 3};
    getElement(a,1) = 10;
    cout << a[1];
    return 0;
}
相关标签: Notes