LInux C++学习day03 引用(reference) 类型转换 类和对象 类定义与实例化

一 引用(reference)

3 引用型函数参数
1)可以将引用用于函数的参数,这时形参就是实参的别名,通过形参可以直接修改实参变量的值,同时还可以避免传参的过程,减小函数调用开销,提高代码执行效率。
2)引用型函数参数有可能意外的修改实参值,如果不希望修改实参本身,可以将形参声明为常引用,提高传参效率的同时还可以接收常量型的实参。

4 引用型函数返回值
1)可以将函数的返回类型声明为引用,这时函数的返回结果就是return后面数据的别名,可以避免函数返回值的开销,提高代码的执行效率。
2)如果函数返回类型是左值引用,那么该函数的返回结果就也是一个左值。
int& func(void){
static int num = 100;
return num;
}
func() = 200;//ok
注:不要从函数中返回局部变量的引用,因为所引用的内存会在函数返回以后被释放,使用非常危险!可以返回成员变量、静态变量、全局变量的引用

5 引用和指针
1)如果从C语言角度看引用的实现,其本质就是指针;但是C++开发中尽量多使用引用而不是指针.
int i = 100;
int* const pi = &i;
int& ri = i;
*pi <=等价=> ri
2)指针可以不做初始化,其目标也可以在初始化再修改(指针常量除外);而引用定义时必须初始化,而且一旦初始化其引用的目标不能再修改.

3)可以定义指针的指针(二级指针),但是不能定义引用的指针//了解
4)可以定义指针的引用(指针变量的别名),但是不能定义引用的引用//了解
5)可以定义指针数组,但是不能定义引用数组,但是可以定义数组引用//了解
6)可以定义函数指针,也可以定义函数引用,其语法特性一致//了解

二 类型转换
1 隐式类型转换
char c = ‘A’;
int i = c;//隐式

void func(int i){}
func©;//隐式

int func(void){
char c = ‘A’;
return c;//隐式
}

2 显式类型转换
2.1 C++兼容C中强制转化
char c = ‘A’;
int i = (int)c;//C风格强制转换
int i = int©;//C++风格强制转换
2.2 C++中扩展了四种操作符形式的显式类型转换
1)静态类型转换
语法:
目标变量=static_cast<目标类型>(源类型变量)
适用场景:
主要用于将void*转换为其它类型的指针.

2)动态类型转换(后面讲)
语法:
目标变量=dynamic_cast<目标类型>(源类型变量)

3)常类型转换
语法:
目标变量=const_cast<目标类型>(源类型变量)
适用场景:
主要用于除去指针或引用的常属性

4)重解释类型转换
语法:
目标变量=reinterpret_cast<目标类型>(源类型变量)
适用场景:
–》任意类型的指针或引用之间的显式转换
–》在指针和整型数之间的显式转换
eg:向物理内存0x12345678,保存整型数据100?
int* paddr = reinterpret_cast<int*>(0x12345678);
*paddr = 100;

小结:来自C++社区给C程序员的建议
1 慎用宏,可以通过const、enum、inline来替换
#define PAI 3.14
==> const double PAI = 3.14;
#define STATE_SLEEP 0
#define STATE_RUN 1
#define STATE_STOP 2
==> enum STATE{SLEEP,RUN,STOP};
#define max(a,b) ((a)>(b)?(a):(b))
==> inline int max(int a,int b){
return a > b ? a : b;
}
2 变量应该随用随声明同时初始化
3 尽量使用new/delete替换malloc/free
4 少用void*、指针计算、联合体、强制转换
5 尽量使用string表示字符串,少用C风格的char*


三 类和对象
1 什么是对象
万物皆对象,任何一种事物都可以看做是对象。

2 如何描述对象
通过对象的属性(名词、数量词、形容词)和行为(动词)来描述对象

3 面向对象的程序设计
对自然世界中的观察引入到编程实践中的中理念和方法,这种方法称为"数据抽象",即描述对象时把细节东西剥离出去,只考虑一般性的、有规律性的和统一性的东西

4 类
类是将多个对象共性提取出来定义的一种新的数据类型,是对 对象属性和行为的抽象描述。

现实世界					类					   虚拟世界
具体对象--抽象--》属性/行为--实例化--》具体对象

四 类定义与实例化
1 类的一般语法形式
struct/class 类名:继承方式 基类,…{
访问控制限定符:
类名(形参表):初始化列表{}//构造函数
~类名(void){}//析构函数
返回类型 函数名(形参表){}//成员函数
数据类型 变量名;//成员变量
};
2 访问控制限定符
1)public:公有成员,任何位置都可以访问
2)private:私有成员,只有类内部的成员函数才能访问
3)protected:保护成员(后面讲)
注:如果没有显式指定访问控制属性,使用struct定义类默认的访问控制属性是public,而class定义类默认访问控制属性是private.
struct/class XX{
int a;//公有,私有
public:
int b;//公有成员
int c;//公有成员
private:
int d;//私有成员
public:
int e;//公有成员
};

猜你喜欢

转载自blog.csdn.net/weixin_43789711/article/details/90113405