zoukankan      html  css  js  c++  java
  • c++类&对象&继承&模版

    C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。

    类&对象

    类:class
    访问类型: public、private、protected
    public: 公共成员在类外部可以访问。
    private: 私有成员,在函数类外部不可访问。
    protected: 受保护成员,但在派生类中可以访问。

    继承

    有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

    1. public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private
    2. protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private
    3. private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private

    但无论哪种继承方式,上面两点都没有改变:

    1. private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
    2. protected 成员可以被派生类访问。`
      继承语句:
      class derived-class: access-specifier base-class

    模版

    模板分为函数模板和类模板两种。他们的作用都是减少编程时的重复定义。

    函数模版

    函数模版定义的基本语法如下:
    template<class 形参名, class 形参名, ...> 返回类型 函数名(参数列表){函数体}
    例如:

    template<class T> T add(T a, T b)
    { return a+b; }
    

    该函数模板定义两个数相加。

    类模板

    类模版定义的基本语法如下:
    template<class 形参名, class 形参名,...> class 类名{...};
    例如:

    template<class T> class A
    { 
        public:
        T add(T a, T b);
        T sub(T a, T b);
    };
    

    模板外如果要定义类模板里的函数,可以用以下形式:
    template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体}
    例如:

    template<class T> T A<T>::add(T a, T b)
    {
        return a+b;
    }
    
    template<class T> T A<T>::sub(T a, T b)
    {
        return a-b;
    }
    

    从类的定义开始,使用上面的规则,将代码进行整合,可以实现两个数相加和相减。整段代码如下:

    #include <iostream>
    using namespace std;
    
    template<class T> class A 
    {
        public:
        	T add(T a, T b);
    	T sub(T a, T b);
    };
    
    
    template<class T> T A<T>::add(T a, T b)
    {
        return a+b;
    }
    
    template<class T> T A<T>::sub(T a, T b)
    {
        return a-b;
    }
    
    int main()
    {
        A<int> a;
        cout<<a.add(1,2)<<endl;
        cout<<a.sub(3,2)<<endl;
        return 0;
    }
    

    在linux命令行运行:

    $ g++ xxx.cpp
    $ ./xxx,out
    

    即可看到结果。

    补充

    1. 可以将定义部分单独写着头文件里。
    2. 注意c++保留字。例如try。
    3. template有时会有template parameter,具体格式为:
      Stack<int,std::vector<int> > vStack; // integer stack that uses a vector
    In lumine Tuo videbimus lumen
  • 相关阅读:
    WCF初探-21:WCF终结点(endpoint)
    WCF初探-20:WCF错误协定
    WCF初探-19:WCF消息协定
    WCF初探-18:WCF数据协定之KnownType
    WCF初探-17:WCF数据协定之等效性
    WCF初探-16:WCF数据协定之基础知识
    WCF初探-15:WCF操作协定
    WCF初探-14:WCF服务协定
    WCF初探-13:WCF客户端为双工服务创建回调对象
    WCF初探-12:WCF客户端异常处理
  • 原文地址:https://www.cnblogs.com/litingyu/p/8192139.html
Copyright © 2011-2022 走看看