明白了一点c++的东西,一一记下

      这段时间养病,看小说累了,就将家里唯二的实体书之一(另一本至今还看不懂)《c++核心思想》抱出来看了。看了几天,慢慢拾回了以前的一点点c++的东西,下了一个vs2005,试着写点小东西,结果发现编译时就出了问题。

        首先是vs2005和vc6.0不一样,直接新建源文件,此时是没有编译选项的,必须建立项目后,添加源文件才有编译的菜单出来。及其b4一把!另外,建立项目时,最好选择空,不然缺省会给你选上“预编译头” ,此时源文件都会自动给你加上什么"stdafx.h",main函数都变为了int _tmain(int argc, _TCHAR* argv[]),看着十分的不爽!

        按着上面说的建立一个空的项目后,此时发现如果include <iostream.h>后,可以直接编译通过,但是如果使用c++的特性,include <iostream>,此时必须继续使用using namespace std;才能编译通过。当时只是注意到这个现象,原因不解。

        继续看了一些书,在c++ primer看到解释了:

        C库头文件的 C++名字总是以字母C开头,后面是去掉后缀.h。 正如前面所解释的 由于在各种C++实现中,头文件的后缀各不相同,因此标准C++头文件没有指定后缀。
    也 由于所有的C++库名std中被定义的,因而在我们的程序文本文件中,它们是不可见的,除非用下面的using指示符显式地使其可见:
    using namespace std; 

 ——update于2007-06-17 星期日13:54:24.93

 


 

cin和getline在一起使用时,注意cin在前面是,需要在使用getline之前,使用如下代码:

string  remainder;
getline(cin,remainder);

因为要防止cin读取数据后,剩余的“换行符”。使用上面的语句将换行符吃掉。否则,下一句getline就只能得到换行了。

 ——update于2007-06-17 星期日15:21:50.14

 


 

如果一个变量是在 全局域 定义的,那么系统会保证提控初始值0;如果是在 局部域 被定义的,则不会提供初始值,随机。

 ——update于2007-06-20 星期三22:16:24.56

 


 

指针都会关联一个类型,不同类型的指针的区别不是在指针的表示上,也不是指针所持有的值上(所有类型的指针,这两点都是相同的)。不同之处在于指针所指的对象的类型上,指针的类型是告诉编译器怎样解释特定地址上的内存的内容的,以及该内存区域应该跨越多少内存单元!

int   * pi  =   0 ;  //pi没有指向任何对象
    double *pi2;
    pi2 = 0; //pi2也没有指向任何对象
    pi = pi2; //编译器报错,不同类型的指针,虽然pi和pi2可以同时为那个地址,但是对该地址上的内存存储分
                   //布和内容的解释完全不一样,如果有这种赋相同地址值的需求的话,可以使用void *类型的指针!

 ——update于2007-06-20 星期三23:02:52.39

 


 

静态成员函数和静态成员变量属于类本身,在类加载的时候,即为他们分配了空间,所以可以通过类名::函数名或类名:变量名来访问。对于非静态成员函数和变量属于对象的方法和数据!

当然,上面的规则,也说明静态成员函数只能调用静态成员变量,而一般成员函数却随时可以调用静态成员函数,另外,需要注意的是,如果main程序有访问静态成员变量,那么这些变量必须初始化,否则会有报错!

 ——update于2007-07-02 星期一23:10:47.92

 


在Unicode下,将CString 转换为 int的函数:_ttoi()。

不过目前还不知道如何将CString 转换为 char *,看了baidu说是强制转换为(LPCTSTR)即可,可惜我的vs2005说是不能如此转换。 不过暂时无所谓了,因为我开始想如此转换的原因就是不知道上面的_ttoi(),一直想着使用atoi(),结果郁闷了很久!

 ——update于2007-07-08 星期日23:12:56.12

 


 

在vs2005中,对话框类的WM_INITDIALOG消息哪里去了?

百度告诉我,从vs2003开始,WM_INITDIALOG就被移到了重写里面,可以到重写中找OnInitDialog,重写即可!

 ——update于2007-07-09 星期一23:22:33.56

 


 

传递一个对象的地址:

希望一个类能够获得自定义的4个对象的地址,以便这4个对象之间互相访问。

按照sunxin的教程,创建4个指向类对象的指针,直接在其他类的成员函数中,给这几个指针赋值。明显这种做法是把这几个指针声明为public类型。

可是作为数据成员,也许我是受到《ccc》一书的影响,实在不喜欢将数据成员声明为public,于是便按照自己的想法,声明为private,并创建了其成员函数,使其能够返回类对象的指针:

void  CMyButton::GetPtMyBtn1()
{
    m_pMybtn1 
= this;
}


void  CMyButton::GetPtMyBtn2()
{
    m_pMybtn2 
= this;
}


void  CMyButton::GetPtMyBtn3()
{
    m_pMybtn3 
= this;
}


void  CMyButton::GetPtMyBtn4()
{
    m_pMybtn4 
= this;
}

 

上面的做法明显存在问题,因为函数每次返回都是同一个对象的指针,而得不到其他3个类对象的地址。

修改如下:

void  CMyButton::GetPtMyBtn1(CMyButton &  mybtn)
{
    m_pMybtn1 
= &mybtn;
}


void  CMyButton::GetPtMyBtn2(CMyButton &  mybtn)
{
    m_pMybtn2 
= &mybtn;
}


void  CMyButton::GetPtMyBtn3(CMyButton &  mybtn)
{
    m_pMybtn3 
= &mybtn;
}


void  CMyButton::GetPtMyBtn4(CMyButton &  mybtn)
{
    m_pMybtn4 
= &mybtn;
}

这里就可以使得一个对象,通过调用这4个成员函数,取得4个不同对象的地址。

但有一点一定要注意,这里参数类型要为:引用。否则的话,后果就是编译不过,因为这里你要传递的是地址!

至于编译错误的原因,我还没有想通,先放在这里记录一下吧:

“void CMyButton::GetPtMyBtn1(CMyButton)”: “CMyButton”中没有找到重载的成员函数”

 ——update于2007-07-12 星期四0:56:29.07

 


 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值