51,C++(05)
来源:互联网 发布:java生成唯一邀请码 编辑:程序博客网 时间:2024/05/17 04:43
一.this 指针
构造函数中 代表正在被构建的对象
成员函数中 代表谁调用这个函数 this这个
指针就指向谁
this 作为参数
this 作为返回值
二.类型和权限的关系
不使用这个类型的对象 去调用成员函数
成员函数(编译器默认给传递一个this指针)
class A{
public:
void show()const{
}
};
void _Z1A4showEv(A* a);
三.const 对象 和 const 函数
const 函数 必须是成员函数
const 对象只能调用const函数
非const对象 优先调用非const 函数 如果没有
则调用const 函数。
const 函数 和 非const 函数可以构成重载
const 函数 不能修改成员变量 但可以访问
const 函数不能调用非const 函数。
四.析构函数
~ 无参构造函数前
在对象销毁前 自动调用一次
语法上允许调用多次
当有堆内存时 自定义析构函数
class A{
int *parr;
public:
A(){
parr=new int[5];
}
~A(){
if(parr){
delete [] parr;
parr=NULL;
}
}
};
A * a=new A();
delete a;
五.new malloc delete free的区别
1.如果成员是类类型 则自动调用这个类型的
构造函数
2.自动处理类型转换
3.调用这个类型的构造函数
delete 释放对象前 调用析构函数
六.静态成员
静态成员属于整个类型 而不属于某个对象
静态成员变量必须在类外进行初始化
调用静态成员使用类名:: 不需要对象就可以
调用。
静态成员函数不能访问非静态成员。
所以如果想访问非静态成员 则需要传递对象
的指针。
/* 封装线程 */
class A{
int data;
public:
static void showA(A* a){
a->data
}
};
七.成员指针
a.成员变量的指针
成员变量的类型 类类型::*变量;
=&类类型::成员变量名;
对象.*成员指针名;
对象地址->*成员指针名;
成员变量指针实际上是一个地址偏移量。
b.成员函数指针
只比普通函数指针 多了一个类名::
void (Date::*funptr)();
赋值时注意取地址 负责编译器将翻译成
funptr=&Date::showYear;
静态函数。
通过对象调用时 注意加小括号
(对象.*指针名)();
(date.*funptr)();
--------------------------------
运算符重载
1.什么是运算符重载
就是函数的特殊表现形式。
2.分数
x/y 1/3 1/2
f1+f2 时 编译器的翻译规则
a.去Fraction 类定义中 找一个成员函数
Fraction operator+(Fraction f2);
b.没有成员函数 就去全局区找一个函数
Fraction operator+(Fraction f1,
Fraction f2);
成员和 全局都存在 只要编译能通过 优先
选择成员。
+ - * / > <
3.把一个分数输出到屏幕
Fraction f(1,3);
cout<<f;
ostream 成员函数 operator<<(Fraction f)
全局形式
流对象不能拷贝 不能加const修饰
ostream& operator<<(ostream& os,
const Fraction& f);
为了访问私有成员 引入友元函数的概念
友元函数就是获得访问类私有成员的全局函数
friend ostream& operator<<(ostream& os,
const Fraction& f);
4.二元运算符
L#R
从L对应的类型中找一个成员函数声明
operator#(R对象类型)
如果没有就去全局找
operator#(L对象类型,R对象类型);
class Integer{
int data;
public:
Integer(int data=0):data(data){}
};
让Integer这个类型支持 >> << + -
== >
能是成员 就用成员形式 不能是成员就考虑
全局(友元)
返回值 如果是基本类型 c++和c相同认为只读
返回值 是非基本类型 c++ 和c 不同
c认为只读 c++默认可以覆盖这个临时结果
如果不让覆盖就加const修饰。
int a=10;
int b=10;
if(a==b){}
char a[30]="hello";
char b[30]="hello";
if(a==b){}
a+b;
a,b都没有变化
a+=b;
a变 b不变
5.单目运算符
#R - ! ~
R# ++ --
#操作数
#R
a.编译器去R类型中找一个成员函数
operator#()
b.如果找不到 就去全局找
operator#(R对象类型);
R#
编译器需要通过哑元区分
a.编译器去R类型中找一个成员函数
operator#(int)
b.如果找不到 就去全局找
operator#(R对象类型,int);
- 51,C++(05)
- Effective C++:条款05
- 05,标准C
- 【C语言】05-进制
- 保准C知识05
- C语言 05
- 05、C语言-字符串
- AliIM2017_taobao(9.09.05C)
- 《Effective C++》条款05
- C语言05
- c语言基础05
- C-51的指针
- 单片机,51c``电子琴
- 51C语言杂记
- 51单片机C关键字
- C/51单片机
- 51c单片机开发
- 51单片机 uart_test.c
- 解释为什么用gets()会少输入一行字符串就能输出结果
- ExtJs tabpanel 内存消耗
- sftp实现远程服务器下载文件
- pkg-config
- struts2获取request,session,application
- 51,C++(05)
- Capture UITableView Touch Event
- 清楚windows的相关历史记录
- (3)数据决定程序结构
- 长乐1384180742136
- 恩施1384180742152
- 德惠1384180742074
- 兰州1384180742152
- 吴忠1384180742761