C++基础入门详细笔记(五)

C++基础入门详细笔记(一)

C++基础入门详细笔记(二)

C++基础入门详细笔记(三)

C++基础入门详细笔记(四)

C++基础入门详细笔记(五)

C++基础入门详细笔记(六)

 

目录

八、函数模板(Function Template)

1、定义

九、抽象和类

1、C++中的类

2、类的声明

3、访问修饰符

4、类的成员函数


八、函数模板(Function Template)

1、定义

所谓函数模板,实际上就是建立一个通用函数

  • 函数定义时不指定具体的数据类型(使用虚拟类型代替)

  • 函数被调用时编译器根据实参反推数据类型-类型的参数化

//模板头与函数声明/定义永远是不可分割的整体
template<typename 类型参数1, typename 类型参数2,...>
返回指类型 函数名(形参列表)
{
    //在函数中可以使用类型参数
}
//函数声明

template<typename T> void swap(T&, T&)); //虚拟类型T

//使用模板技术实现变量交换值
template<typename T> //模板头
void swap(T &a, T &b)
{
    T temp = a;
    a = b;
    b = temp;
}

 

example:

#include <iostream>
using namespace std;

//函数声明
template<typename T> void sort(T tarray[], int len); //虚拟类型T
template<typename T> void show(T tarray[], int len); //虚拟类型T

int main()
{
    int inums[] = {56,54,12,89,43};
    float fnums[] = {78.0f,5.7f,42.8f,99.1f};
    double dnums[] = {78.9,23.6,77.8,98.5,33.3};
    cout << "Before sorting :";
    show(inums, sizeof(inums) / sizeof(inums[0]));
    sort(inums, sizeof(inums) / sizeof(int));
    cout << "After sorting:";
    show(inums, sizeof(inums) / sizeof(inums[0]));


    cout << "Before sorting :";
    show(fnums, sizeof(fnums) / sizeof(fnums[0]));
    sort(fnums, sizeof(fnums) / sizeof(float));
    cout << "After sorting:";
    show(fnums, sizeof(fnums) / sizeof(fnums[0]));


    cout << "Before sorting :";
    show(dnums, sizeof(dnums) / sizeof(dnums[0]));
    sort(dnums, sizeof(dnums) / sizeof(double));
    cout << "After sorting:";
    show(dnums, sizeof(dnums) / sizeof(dnums[0]));
}

//使用模板技术实现变量交换值
template<typename T> //模板头
void sort(T tarray[], int len)
{
    T temp;
    for(int i = 0;i < len - 1; i++)
    {
        for(int j = 0; j < len -i - 1; j++)
        {
            if(tarray[j] >  tarray[j+1])
            {
                temp = tarray[j];
                tarray[j] =tarray[j + 1];
                tarray[j + 1] = temp;
            }
        }
    }
}

template<typename T> 
void show(T tarray[], int len)
{
    for(int i = 0; i < len; i++)
    {
        cout << tarray[i] << ",";
    }
        cout << endl;
}

九、抽象和类

面向对象:基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统(模拟现实)

  • 对象是由数据和容许的操作组成的封装体,与客观实体有着直接对应关系

  • 面向对象不是某一种语言的特性,而是一种编程思想

  • 面向对象编程(OOP)特性:抽象、封装和数据隐藏、多态、继承、代码的可重用性

1、C++中的类

  • 类是一种将抽象转换为用户定义类型的工具

  • 将数据表示和操纵数据的方法组合成一个整体

  • 类的实例称为对象,对象的集合称为类

  • 类中的变量和函数称为成员

  • 类是对象的模板 

2、类的声明

使用class/struct

class 类名{};        //s声明的类型默认成员是私有的(private)
struct 类名{};     //声明的类型默认成员是公有的(public)

注意:

  • class方式声明的类型与struct声明的类型仅仅是形式上不同

  • 其唯一的区别在于使用class声明的类型默认成员是私有的(private),而struct声明的类型默认成员是公有的(public)

3、访问修饰符

常见访问修饰符:

  • public:修饰的成员在任意地方都可以访问

  • private:修饰的成员只能够在类中或者友元函数中可以访问

  • protected:修饰的成员可以在类中函数、子类函数及友元函数中访问

修饰成员:

  • 将修饰关键字放置在类定义的大括号中,添加冒号

class 类型
{
    修饰符:
        成员列表;
};

例如:

class LandOwnerV1
{
    public:                    //公有
        LandOwnerV1();          //构造函数的声明
        virtual ~LandOwnerV1(); //析构函数的声明
        void TouchCard(int cardcount);
        void showscore();
    private:                //私有
        string name;    //地主的名称
        long score;     //地主的积分
        int cards[20];  //地主的手牌数组
};

 

4、类的成员函数

  • 函数声明:

class 类名
{
    修饰符1:
        变量1类型    变量1名称;
        变量2类型    变量2名称;
    修饰符2:
        函数1返回类型    函数1名称();
}

例如:

class LandOwnerV1
{
    public:
        void showscore();
    private:       
        string name;    //地主的名称
        long score;     //地主的积分
        int cards[20];  //地主的手牌数组
};
  • 函数定义

返回类型    类名::函数名()        //::为作用域解析运算符
{
    //函数操作
}

例如:

void LandOwnerV1::TouchCard(int cardcount)
{
    cout << name << "touched" <<cardcount << "cards" << endl;
}

注:无论类成员是数据成员还是成员函数,都可以在类的公有部分或私有部分中声明它。但由于隐藏数据是面向对象编程(OOP)主要的目标之一,因此数据项通常放在私有部分,组成类接口的成员函数放在公有部分;否则,就无法从程序中调用这些函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值