月度归档: 2010 年 1 月

  • 关于c++中const成员函数

    const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.

    class CTest
    {
    public:
        CTest(const CTest& t) // 这里t是const修饰的类的引用,它所调用到的方法应该是const成员函数
        {
            a = t.Fun(); 
        }
        int Fun()  // const成员函数
        {
            return a;
        }
    private:
        int a;
    };
    int main()
    {
        return 0;
    }
  • 关于C++指针的引用

    注意,只有指针的引用(*&)

    没有引用的指针这么一说,引用的指针(&*)编译也是绝不可能通过的

    指针的引用,代码如下:

    #include <iostream>
    using namespace std;
    class A
    {
    public:
        int m_a;
    };
    void f(A * &a)
    {
        cout << (a)->m_a << endl;
    }
    int main()
    {
        A a;
        a.m_a = 88;
        A *p = &a;
        f(p);
        return 0;
    }

    分析的时候从右向左分析
    f(A * &a)
    先是 & , 表明这是一个引用
    然后是 *
    表明这是一个指向 A* 的引用

  • 配置VC++使用PROC

    假定ORACLE安装目录为D:/oracle/

    工具–>选项–>项目和解决方案–>VC++目录

    可执行文件 D:/oracle/ora90/BIN
    包含文件 D:/oracle/ora90/precomp/public
    库文件 D:/oracle/ora90/precomp/lib/msvc

    确定–>重启VS–>OK

  • C++应用程序在Windows上的启动过程

    一个C++应用程序的启动过程:

    其实是系统调用CRT,然后CRT调用的WinMain.

    a.shell调用CreateProcess激活App.exe
    b.系统产生一个进程内核对象,使用计数值加1
    c.系统为此进程产生4GB的地址空间
    d.加载器将必要的码加载到上述地址空间中,包括App.exe的程序,资料以及所需要的dll。它们被记录在可执行文件PE格式的.idata section中。
    e.系统为此进程建立一个执行线程,即主线程。执行线程才是CPU时间的分配对象。
    f.系统调用C Runtime函数库的StartUp code
    g.startup code调用APP程序的WinMain函数
    h.APP程序开始运作
    i.使用者关闭APP,退出消息循环,退出WinMain函数
    j.返回到startup code
    k.返回到系统,系统调用ExitProcess结束进程。