C/C++ 初学简单笔记 —1—

来源:互联网 发布:linux安装usb网卡驱动 编辑:程序博客网 时间:2024/05/20 05:30
1. 面向对象编程的文件结构:
1)头文件 .h,   包含类的定义。
2)源文件 .cpp,  类的成员函数,
3)源文件 .cpp,  编写主函数

2. C++为了节省内存,将成员函数的代码存储在计算机内存的一个公用区中,以供该类的所有对象共享。

3. 对象初始化:1)用成员函数 putXxx    2)用构造函数。

4. delete 用法

delete 指针名              // 变量           delete *p

delete []指针名            //  一维数组   delete []p;

delete [行数]指针名     //  二维数组   delete [5]p;

只要程序中,有用new动态分配空间,那么结尾的时候,必须要用delete释放内存空间。


5. C++有三种权限 public private protect,只有public是可以在类外直接访问的,默认权限是private 


6. '::' 域运算符,就是表明成员变量或是成员方法是属于那个类的。


7. 关于this指针。

如下函数
void student::put(int id, char *name, student *const this)
{this->id=id;...}

this是指向本对象的只读指针,是一个隐含的形参.由系统在幕后自动设置,自动维护。

如果想返回当前对象,可用 return *this;


8. 构造函数,可以在构造函数中实现初始化,注意:构造函数前面不能加上void,否则出错!

如果重载了构造函数,那么系统就不会自动生成构造函数了。

所以只要重载了构造函数,最好写上无参的构造函数,这是一个好习惯。


9. 拷贝函数,就是为了对象间的拷贝,默认的拷贝函数会执行拷贝工作。

拷贝函数形式
类型::类名(类名 &对象别名)
{...}
如:
A a;
A b(a);
A c = a;

以上都实现了对象的复制,我暂时想不出有什么区别。


10. 析构函数, 在对象消亡的时候,自动调用,默认的析构函数什么都不做。
A a1;

A *a2 =new A();

程序结束的时候,a1 会自动调用析构函数,而a2不会自动调用析构函数!

我觉得可能是a1在栈内存中,运行结束后,弹栈,所以对象消失,会自动调用析构函数

而a2的声明在栈内存中,而实例化new A()分配在堆中,弹栈的时候,a2会消失,但是new A()不会消失。

所以没有调用析构函数。需要用 delete *a2 释放。


11.预编译

 #ifdef DEBUG

可以进行debug测试

 #endif

以上的语句可以用于debug测试,如果不想执行debug里面的语句,可以将前面的定义值去掉就行了。


12. static 声明的语句,只会执行一次。

如:

for (i=0; i<10; i++)
{

static int b=0;

        b++;

        cout<<b<<endl;

}     // 可以看到b的值是不停增大的,意味着用static修饰的声明语句只执行了一次!


2 0