文档章节

C++代码01

把南墙撞开
 把南墙撞开
发布于 2016/03/28 09:19
字数 858
阅读 25
收藏 0
//001 IntCell类的完整声明
class IntCell
{
private:
    int storedValue;
public:
    IntCell(){storedValue = 0;}
    IntCell(int initialValue){storedValue = initialValue;}
    int read(){return storedValue;}
    void write(int x){storedValue = x;}    
};


//002 改进的IntCell类
class IntCell
{
private:
    int storedValue;
public:
    explicit IntCell(int initialValue = 0):storedValue(initialValue){}
    int read() const {return storedValue;}
    int write(int x){storedValue = x;}
};


//003 接口与实现的分离 three files
//IntCell.h
#ifndef IntCell_H
#define IntCell_H
class IntCell
{
private:
    int storedValue;
public:
    explicit IntCell(int initialValue = 0);
    int Cellread() const;
    void write(int x);
};
#endif

//IntCell.cpp
#include "IntCell.h"
IntCell::IntCell(int initialValue):storedValue(initialValue){}

int IntCell::read() const {return storedValue;}

void IntCell:: write(int x){storedValue = x;}

//TestIntCell.cpp
#include <iostream>
#include "IntCell.h"
using namespace std;
int main()
{
    IntCell m;
    
    m.write(5);
    cout << "Cell contents: " << m.read() << endl;
    return 0;
}


//004 vector类的例子
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> squares(100);
    
    for (int i = 0; i < squares.size(); i++)
        squares[i] = i*i;
    
    for (int i = 0; i < squares.size(); i++)
        cout << i << " " << squares[i] << endl;
        
    return 0;
}


//005 003中IntCell类的指针用法
int main()
{
    IntCell *m;
    m = new IntCell;
    m->write(5);
    cout << "Cell Contents: " << m->read() << endl;
    
    delete m;
    
    return 0;
}


//006 数据成员是指针的IntCell类实现
//IntCell.h
#ifndef IntCell_H
#define IntCell_H
class IntCell
{
private:
    int * storedValue;
public:
    explicit IntCell(int initialValue = 0);
    
    IntCell(const IntCell & rhs);
    ~IntCell();
    const IntCell& operator=(const IntCell & rhs);
    
    int read() const;
    void write();
};
#endif

//IntCell.cpp
#include "IntCell.h"
IntCell::IntCell(int initialValue = 0)
{
    storedValue = new int(initialValue);
}

IntCell::IntCell(const IntCell& rhs)
{
    storedValue = new int(*rhs.storedValue);
}

IntCell::~IntCell()
{
    delete storedValue;
}

const IntCell& IntCell::operator=(const IntCell& rhs)
{
    if (this != &rhs)
        *storedValue = *rhs.storedValue;
    return *this;
}

int IntCell::read() const
{
    return *storedValue;
}

void IntCell::write(int x)
{
    *storedValue = x;
}

//IntCellTest.cpp
#include <iostream>
#include "IntCell.h"
int main()
{
    IntCell a(2);
    IntCell b = a;
    IntCell c;
    
    c = b;
    a.write(4);
    cout << a.read() << endl
        << b.read() << endl
        << c.read() << endl;
    return 0;
}

    

//007 未分离的MemoryCell类模板
template <typename Object>
class MemoryCell
{
private:
    Object storedValue;
public:
    explicit MemoryCell(const Object& initialValue = Object()):storedValue(initialValue){}
    const Object& read() const {return storedValue;}
    void write(const Object& x) {storedValue = x;}
};


//008 使用MemoryCell类模板的程序
int main()
{
    MemoryCell<int> m1;
    MemoryCell<string> m2("hello");
    
    m1.write(37);
    m2.write(m2.read() + " world");
    cout << m1.read() << endl
        << m2.read() << endl;
    return 0;
}


//009 泛型函数findMax的例子
class Employee
{
private:
    string name;
    double salary;
public:
    void setValue(const string& n, double s){name = n; salary = s;}
    const string& getName() const {return name;}
    void print(ostream& out) const {out << name << " (" << salary << ")" ;}
    bool operator<(const Employee& rhs) const {return salary < rhs.salary;}    
};

ostream& operator<<(ostream& out, const Employee& rhs)
{
    print(out);
    return out;
}

int main()
{
    vector<Employee> v(3);
    
    v[0].setValue("George Bush", 400000.00);
    v[1].setValue("Bill Gates", 2000000000.00);
    v[2].setValue("Dr. Phil", 13000000.00);
    cout << findMax(v) << endl;
    return 0;
}


//010 findMax函数模板
/**
 * Return the maximum item in array a.
 * Assumes a.size() > 0.
 * Comparable objects must provide operator< and operator=
 */
 template <typename Comparable>
 const Comparable& findMax(const vector<Comparable> & a)
 {
     int maxIndex = 0;
     
     for (int i = 1; i < a.size(); i++)    
         if (a[maxIndex] < a[i])
             maxIndex = i;
     return a[maxIndex];     
 }


//011 函数对象作为findMax的第二个参数
template <typename Object, typename Comparator>
const Object& findMax(const vector<Object>& arr, Comparator cmp)
{
    int maxIndex = 0;
    
    for (int i = 1; i < arr.size(); i++)
        if (cmp.isLessThan(arr[maxIndex]), arr[i])
            maxIndex = i;
            
    return arr[maxIndex];
}

class CaseInsensitiveCompare
{
public:
    bool isLessThan(const string& lhs, const string& rhs) const
    {
        return stricmp(lhs.c_str(), rhs.c_str()) < 0;
    }
};

int main()
{
    vector<string> arr[3];
    arr[0] = "ZEBAR";
    arr[1] = "alligator";
    arr[2] = "crocodile";
    cout << findMax(arr, CaseInsensitiveCompare()) << endl;
    
    return 0;
}


//012 第二个版本findMax
template <typename Object, typename Comparator>
const Object& findMax(const vectror<Object>& arr, Comparator isLessThan)
{
    int maxIndex = 0;
        
    for (int i = 1; i < arr.size(); i++)
        if (isLessThan(arr[maxIndex], arr[i]))
            maxIndex = i;
            
    return arr[maxIndex];
}

#include <functional>
template <typename Object>
const Object& findMax(const vector<Object>& arr)
{
    findMax(arr, less<Object>());
}

class CaseInsensitiveCompare
{
public:
    bool operator()(const Object& lhs, const Object& rhs) const
    {
        return stricmp(lhs.c_str(), rhs.c_str()) < 0;
    }
}

int main()
{
    vector<string> arr[3];
    arr[0] = "ZEBRA";
    arr[1] = "alligator";
    arr[2] = "crocodile";
    cout << findMax(arr, CaseInsensitiveCompare()) << endl;
    cout << findMax(arr) << endl;
    
    return 0;
}


//013 矩阵
#ifndef MATRIX_H
#define MATRIX_H

#include <vector>
using namespace std;

template <typename Object>
class matrix
{
private:
    vector <vector<Object>> array;
public:
    matrix(int rows, int cols):array(rows)
    {
        for (int i = 0; i < array.size(); i++)
            array[i].resize(cols);
    }
    
    const vector<Object>& operator[](int row) const
    {
        return array[row];
    }
    vector<Object>& operator[](int row)
    {
        return array[row];
    }
    
    int numrows() const
    {
        return array.size();
    }
    
    int numcols() const
    {
        return numrows() ? array[0].size() : 0;
    }
};




© 著作权归作者所有

把南墙撞开
粉丝 0
博文 73
码字总数 21068
作品 0
昌平
私信 提问
c语言基础学习11_项目实战:IDE(集成开发环境)

============================================================================= ============================================================================= 涉及到的知识点有: 一......

黑泽明军
2018/01/29
0
0
在 C#中调用 VC 编写的 dll 库

如何在C#中使用C/C++写的DLL。举例说明: 建立VC工程DllDemo,建立的时候选择MFC AppWizard(dll),选择Regular Dll using shared MFC Dll或者MFC Extension Dll。 现在可以写一个函数代码,在...

鉴客
2012/11/23
1K
1
在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解决方案的编程环境是C#模式,这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用。 一:...

老朱教授
2017/11/26
0
0
stl-stable_sort源码学习笔记

前几天,一个新同事前来询问算法stl-stablesort的情况。由于离上次研读stl源码时间久已(两三年前的事儿了),有些细节笔记模糊了。所以就找了sgi-stl和ms-stl俩版本,重新复习一遍其中的stl...

huangjunkun
2011/11/07
1K
0
C语言编程基础学习如何定义一维数组和二维数组

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用...

NervosCommunity
54分钟前
5
0
通过OAuth2.0 获取授权访问SF 用户数据

通过OAuth2.0 获取授权访问SF 用户数据 OAuth2.0 相关知识 深入了解 Salesforce 中的 OAuth 2.0(SF官方) OAuth 2.0 的一个简单解释(阮一峰大神) OAuth 2.0 的四种方式(阮一峰大神) GitHub OA...

在山的那边
今天
7
0
编写程序:从键盘上接受一个三位数(首先要确保是三位数),计算出各位之和输出。

#include<stdio.h> int main() { int a,sum=0; printf("请输入一个三位数:\n"); scanf("%d",&a); sum=a/100+a%100/10+a%10; printf("这三个数的和:%d",sum); return 0; }......

201905021729吴建森
今天
7
0
如何离开/退出/停用Python virtualenv

我正在使用virtualenv和virtualenvwrapper。 我可以使用workon命令在virtualenv之间切换。 me@mymachine:~$ workon env1(env1)me@mymachine:~$ workon env2(env2)me@mymachine:~$ workon e......

技术盛宴
今天
7
0
成长之路 万事坚持难

任何事情开了头,想要更好的发展下去,不忘初心,就一定要坚持下去。 以前自己坚持了一些事情,比如早睡不吃东西,由于中途断了,没有及时止损,导致又接着恶习断了几天。所以 及时的反省和调...

T型人才追梦者
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部