50,C++(04)
来源:互联网 发布:九回时间旅行 知乎 编辑:程序博客网 时间:2024/05/16 01:51
/*
达内学习 C++ day48 2013-11-8
*/
四,构造函数
1,无返回值,构建对象时调用一次初始化对象,给成员赋值
2,参数默认值,减少构造函数重载个数
3,不写时,默认构造无参公开
4,一个对象的创建过程
a,根据类型分配空间
b,基本类型什么都不做
类类型 默认调用类的无参构造
c,调用类型构造函数的代码
五,类的声明 和 实现的分离
1,写类的头文件
成员变量的定义 构造函数成员函数的声明
2,写类的实现文件
导入头文件 #include "**.h"
只留下函数 函数名前面加 类型::
3,写测试文件
六,this 指针
用在构造函数中 代表正在被创建的对象的地址
用在成员函数中 谁调用代表谁的指针
this 作为参数 和 返回值
七,关于权限 实际是编译对类型访问数据的限制,如果不通过类型访问(全局代码段访问)就不受限制。
gdb 调试
g++ -g **.cpp //生成调试信息的a.out
gdb a.out
b(break) main //在main函数打断点 也可以b 15 停到15行
run a.out //执行到main
n(next) //继续向下执行
s(step) //跳进函数
八,const 对象和 const 函数
const 类型 对象名;
1,只能调用const类型的成员函数
2,const 函数和 非 const 函数可以构成重载
3,非const对象优先选择非const 如果没有const函数则调用const函数
4,const 函数的限制:
const 函数不能修改对象的成员变量
const 函数只能调用 const 函数
5,如果想在const函数中修改对象的成员变量
则类成员变量声明时候需要修饰成 mutable
九,析构函数
一种特殊的函数
在构造函数前加 ~
在对象销毁前自动调用一次 但是允许调用多次
什么时候需要自定义析构函数
当有堆内存时(进程结束 调用相应释放内存的函数 或者运算符)
十,拷贝构造函数
使用一个已经有的对象创建一个同类型的对象。
a, 拷贝构造函数的调用时机
1,使用同类型的对象创建对象
A a;
A b=a;
2,函数传递参数时
void testA(A a)
{
A a;
testA(a);
}
3,函数的返回值
A getA(A& a)
{
return a;
}
b,系统提供的是逐字节拷贝
c,拷贝构造函数的自定义实现
类型(const 类型& 变量)
{
/* 拷贝构造函数 */
}
只有当对象中有堆内存时,需要释放时候,才考虑自定义拷贝构造函数。
d,使用拷贝构造特殊情况
编译器优化
只要类中有指针类型的成员 构造函数中要考虑给指针分配内存,在析构函数中考虑释放内存,在拷贝构造函数中考虑内存的分配,内存数据的复制。
(赋值运算符函数)
十一,malloc 和 new 的区别
new 比malloc 多做三件事
1,如果new的类型中有自定义类型,则会自动构建这个自定义类型的成员
2,自动处理类型转换
3,如果使用 new,会调用当应的构造函数,malloc 不会
malloc 申请不会构造
free 和 delete 的区别
delete会调用析构函数
十二,静态成员
属于整个类型的函数 而不属于整个对象级别的函数,静态函数不需要通过对象就能调用只要类型就能访问(用对象 也是可以滴)
静态函数没有 this 指针,所以静态函数不能访问非静态的成员。
静态成员变量的初始化 必须在类外完成。
静态成员都可以直接通过类名::去调用
十三,成员指针
指向成员的指针
a,指向成员变量的指针
成员变量的类型 类型::*指针名
struct Date{
int year;
int month;
int day;
};
int Date::*mptr;
给成员指针赋值
mptr = &Date::year;
通过成员指针取得成员的值
Date date;
date.*mptr;
Date *date2 = new Date;
date2->*mptr;
/* 成员指针记录在对象中的偏移量 */
- 50,C++(04)
- c++-04
- Effective C++:条款04
- Objective-C 04
- 【C语言】04-函数
- 04,标准C
- 【C语言】04-函数
- 标准C知识04
- 【C语言】04-函数
- 【C语言】04-函数
- 【C语言】04-函数
- C 语言04
- C和指针 04
- Effective.C 读书笔记04
- 【C语言】04-函数
- 《C++》 04 C++ 常量
- 04、C语言-指针
- C语言04
- python related web
- android 错误
- 黑马程序员_java高效计数器
- 方格取数
- 在html中,怎么改变<table><form>在页面显示的位置?
- 50,C++(04)
- linux软件安装卸载
- Android中设置onTouch事件后listview产生点击变长按、不能滚动的的怪异现象
- 数据结构之图的存储结构——动态邻接表
- latex中的希腊字母
- hdu4771 Stealing Harry Potter's Precious 亚洲区域赛杭州赛区第二题题解
- 《编程之美》:黑球,白球各100,问最后剩下一个是黑球的概率
- jQuery Global jQuery event
- 求平均数 (x&y)+((x^y)>>1)原理