关于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结束进程。

C++中ostringstream和istringstream的理解

今天脑子抽风,突然分不清ostringstream为什么叫输出, istringstream为什么叫输入.

抽过之后,做出如下总结,以防再抽.

输入输出是针对std::string而言的
输出流:格式化以后输出到std::string
输入流:绑定std::string str之后把str里的一个word输入到另一个std::string中,用于处理字符串

总结: 输入输出,站在流本身的角度来看。

关于VC++预处理指令#和##

#不管传入什么参数,都会转换成字符串

##不管是什么类型,都会连接到一起,但要求传入的参数应该是同一种类型

eg.

//language:c
#include <stdio.h>
int main()
{
#define PASTE(a,b,c) (#a#b#c)
    printf("%s/n", PASTE(7,8,9));
#define NUM(a,b,c) (a##b##c)
    printf("%d/n", NUM(1,2,3));
#define STR(a,b,c) (a##b##c)
    printf("%s/n", STR("a","b","c"));
    return 0;
}

温故而知新,函数指针

 函数指针:

一个函数在编译时被分配一个入口地址,这个入口地址就是函数指针.可以用一个指针变量指向该函数指针,然后通过该变量来调用函数.

声明:

返回值类型 (*指针变量名)(参数类型列表);

或

typedef 返回值类型 (*指针变量名)(参数列表名);

Win32编程,让DC不重画某个区域的API函数

Win32编程,让DC不重画某个区域的API函数:ExcludeClipRect

描述:这个函数将创建一个新的区域,这个新的区域 由 现有的区域 去掉 指定区域 后 组成。

功能:可以让DC不刷新某个指定区域。

说明:这个函数在MFC中的CDC类里有封装。

int ExcludeClipRect(
    HDC hdc, // handle to DC
    int nLeftRect, // x-coord of upper-left corner
    int nTopRect, // y-coord of upper-left corner
    int nRightRect, // x-coord of lower-right corner
    int nBottomRect // y-coord of lower-right corner
);