c/c++笔记
2016-01-13 15:19
393 查看
objdump
objdump用来显示一个或多个目录文件的信息
objdump -h main.o 显示目录文件各个段的头部摘要信息
readelf
readelf命令是Linux下的分析ELF文件命令
readelf -h main 显示main的EL Header的文件头信息(即ELF开始的前52个字节)
类和对象
访问限定符:public private protected
class中可以不加访问限定符,默认private
struct定义的不加访问限定符,默认public
一.成员函数
1.初始化对象的接口——–构造函数(无返回值)
CStudent(); 系统自带默认构造函数,可重载(加参数)。[尽量不要用this指针]
CStudent::CStudent():m_MAX(20); 限定条件参数的初始化
2.释放new分配的内存——析构函数(系统自动调用)
~CStudent(); 不可以重载
3.拷贝构造函数—–把已经存在的对象拷贝给重新创建的对象
CStudent( const CStudent &obj); 生成新的对象
如果类里出现指针,调用new,必须写拷贝构造函数和赋值运算符重载函数
4.赋值运算符重载函数——把已经存在的对象拷贝给已经存在对象
CStudent& operator=(const CStudent &obj);
1.防止自拷贝: if( this == &obj) { return *this;}
2.实现时必须先释放当前对象
3.对象的拷贝
注:以上四个函数系统会默认生成,若没有写调用函数时,这些都是按照字节拷贝赋值
5.内联函数
二.成员函数分量
1.静态成员函数(不含this指针)—-不能操作一般成员变量
不要对象调用,如:student.show(); //error
用类全局调用。 CStudnet::show();
2.一般成员函数(含this指针)—-对象调用
3.const成员函数:在函数后面加const
不能修改一般成员分量的值,const成员变量可修改
void show() const; // () 中省略了 const CStudent *this
void show(); //() 中省略了 CStudent *this
如果在const成员函数中允许修改成员变量的值:
在定义变量前加关键字:mutable。// mutable int m_a;
4.友元函数(友元带来的麻烦 > 帮助) <少用>
作用:定义全局函数访问类中私有或保护成员
用法:在类中任何地方都可以声明,声明前加friend
objdump用来显示一个或多个目录文件的信息
objdump -h main.o 显示目录文件各个段的头部摘要信息
readelf
readelf命令是Linux下的分析ELF文件命令
readelf -h main 显示main的EL Header的文件头信息(即ELF开始的前52个字节)
**using 声明** using std::cout 把std名字空间的cout(某一个)符号印出来 **using指示符** using namespace std; 把std名字空间的所有符号引出来 const------(const:编译过程宏展开) const int len = 1024; // 在C++中,len才是真正的常量(不分配内存),C中为常变量 int a[len] = {0}; // C++可以;C不可以 const定义的值本文件可以,相当于static,只在当前文件中替换 extetn const int len = 1024; 外部文件可以访问,此时分配内存 **引用 & ----比指针安全** int a=10; int b = 20; double d = 10.24; int *p = &a; // 取地址。指针指向的不一定是一个合法的内存地址 int &c = b; // 引用变量。相当于b的一个别名,引用必须引用一个合法内存 int &c = 10; // error const int f = d; //合法,d是double const int &e= 10; //合法 int &b = (int)a; // error ***与const的安全性** 例 int a = 10; 修改:1》const int *p = &a; int *p = &a; 2》const int *const *q = &p; const int **q = &p;//安全性降低 // const 修饰int*,*q不能赋值,但是*p = 40 ;能通过 例 int a = 10; int *p = &a; // 编译失败:无法从”int **”转换为”const int **” const int **q = &p; // 因为可以通过*q赋值修改a,即修改*p **explict** 防止类型转换,只针对带一个参数的构造函数 例:CTest t1; t1=10; //t1 = CTest(10); 显示类型转换 t1 = CTest(10,20); t1 = (CTest)(10,20); //逗号表达式相当于t1=(CTest)20; **new和delete** // new type();或new type; 1.分配单个内存空间 int *p = new int (10); //p:栈内存 int(10):堆内存 delete p; p=NULL; 2.分配数组 int *p = new int[10]; delete []p ; p = NULL; 3.常量内存的动态分配 const int *p = new const int (10); 4.定位new // new (address) type; char *p = new char[1024]; TYPE *q = new (p) TYPE; // 从p中取内存 delete []p; p = NULL; **C++类型强转** 1.const_cast: 去除const属性 const int a = 10; int *p = const_cast<int *>(&a); 2.static_cast: 只支持C++编译器支持的类型间转换 int *p = NULL; float *q = static_cast<float *>(&p); //编译失败 3.reinterpret_cast: 类似C语言强转,无安全可言 4.dynamic_cast: 类继承结构向下deep类型转换,支持对象类型转换
类和对象
访问限定符:public private protected
class中可以不加访问限定符,默认private
struct定义的不加访问限定符,默认public
一.成员函数
1.初始化对象的接口——–构造函数(无返回值)
CStudent(); 系统自带默认构造函数,可重载(加参数)。[尽量不要用this指针]
CStudent::CStudent():m_MAX(20); 限定条件参数的初始化
2.释放new分配的内存——析构函数(系统自动调用)
~CStudent(); 不可以重载
3.拷贝构造函数—–把已经存在的对象拷贝给重新创建的对象
CStudent( const CStudent &obj); 生成新的对象
如果类里出现指针,调用new,必须写拷贝构造函数和赋值运算符重载函数
4.赋值运算符重载函数——把已经存在的对象拷贝给已经存在对象
CStudent& operator=(const CStudent &obj);
1.防止自拷贝: if( this == &obj) { return *this;}
2.实现时必须先释放当前对象
3.对象的拷贝
注:以上四个函数系统会默认生成,若没有写调用函数时,这些都是按照字节拷贝赋值
5.内联函数
二.成员函数分量
1.静态成员函数(不含this指针)—-不能操作一般成员变量
不要对象调用,如:student.show(); //error
用类全局调用。 CStudnet::show();
2.一般成员函数(含this指针)—-对象调用
3.const成员函数:在函数后面加const
不能修改一般成员分量的值,const成员变量可修改
void show() const; // () 中省略了 const CStudent *this
void show(); //() 中省略了 CStudent *this
如果在const成员函数中允许修改成员变量的值:
在定义变量前加关键字:mutable。// mutable int m_a;
4.友元函数(友元带来的麻烦 > 帮助) <少用>
作用:定义全局函数访问类中私有或保护成员
用法:在类中任何地方都可以声明,声明前加friend
相关文章推荐
- C/C++ void及void指针
- C、C++动态分配函数暨几种参数传递疑难解析
- C++中的 virtual destructor
- C++中的虚函数表
- C++ Primer Plus 学习笔记(三)--编程练习6
- c++内存分配(new和delete)
- C++中的多态与虚函数的内部实现
- LevelDB windows vs2013 c++编译和测试
- 【C语言提高51】链表基本概念与静态链表
- CodeForces 413A Data Recovery
- C语言学习之字符串、字符和字节第三讲
- 【C语言提高50】Win32环境下动态链接库(DLL)编程原理
- 游戏里C++,JAVA,quick交互
- C/C++内联函数(inline)
- 【30天学习C++ primer系列】day2:基础拾忆之变量和基本类型(1/2)。-20160111
- cpp题目
- C语言版本历史
- 值得学习的C语言开源项目
- Visual Studio2013的C语言编译器对C99标准的支持情况
- 有序插入建立链表 C语言实现