一、C++函数重载笔记 函数重载:重载就是在一个作用范围内(同一个类、同一个命名空间等)有多个名称相同但参数不同的函数。 参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。 注意:1.在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人觉得莫名其妙。 2.注意,参数列表不同包括参数的个数不同、类型不同或顺序不同,仅仅参数名称不同是不可以的。函数返回值也不能作为重载的依据。 函数的重载的规则: (1)函数名称必须相同。 (2)参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。 (3)函数的返回类型可以相同也可以不相同。 (4)仅仅返回类型不同不足以成为函数的重载。 当实参的类型和形参的类型不一致时情况就会变得稍微复杂,例如函数形参的类型是int,调用函数时却将short类型的数据交给了它,编译器就需要先将short类型转换为int类型才能匹配成功。 应该按照下面的优先级顺序来处理实参的类型: C++ 标准还规定,编译器应该按照从高到低的顺序来搜索重载函数,首先是精确匹配,然后是类型提升,最后才是类型转换;一旦在某个优先级中找到唯一的一个重载函数就匹配成功,不再继续往下搜索。
二、C++和C的混合编程 extern “C” 既可以修饰一句 C++ 代码,也可以修饰一段 C++ 代码,它的功能是让编译器以处理 C 语言代码的方式来处理修饰的 C++ 代码。 示例代码
#ifdef __cplusplus
extern "C" {
#end
void display();
#ifdef __cplusplus
}
#endif
三、C++的类与对象 类与对象的关系:类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。 有些教程将类的成员变量称为类的属性(Property),将类的成员函数称为类的方法(Method)。 注意:1.与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,或者说是通过类这种数据类型创建出来的一份实实在在的数据,所以占用内存空间。 2.类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。 3.栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。 4.类的定义
class Student{
public:
char *name;
int age;
float score;
void say(){
cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
}
};
注意:(1)类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。 (2)类可以理解为一种新的数据类型,该数据类型的名称是 Student。
5.创建类的对象
class Student LiLei;
Student LiLei;
6.访问类的对象的成员变量或成员函数 可以用点号“.”访问。
#include <iostream>
using namespace std:
class People{
public:
int age;
char *name;
```void say(){
cout<<name<<的年龄是<<age<<endl;
}
};
int main()
{
People Li;
Li.name = "Bob";
Li.age = 18;
Li.say();
return 0;
}
最终打印结果为:Bob的年龄是18
7.使用对象指针
```cpp
People Mn;
People *pMn = &Mn;
People *pLn = new Ln;
pLn->name = "Tom";
delete pLn;
8.类的成员变量和成员函数 与普通变量和函数的区别:(1)定义类的时候不能对成员变量赋值,原因是它不占内存,而普通变量可以直接赋值。 (2)成员函数是一个类的成员,出现在类体中,它的作用范围由类来决定;而普通函数是独立的,作用范围是全局的,或位于某个命名空间内。 (3)成员函数可以定义在类体内,也可以定义在类体外并在类体内声明。
class Student{
public:
char *name;
int age;
float score;
void say();
};
void Student::say(){
cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
}
(4)成员函数定义在类体内外的差别: 在类体中定义的成员函数会自动成为内联函数,在类体外定义的不会。也就是说如果想定义一个内联函数除了用关键字inline,还可以直接定义到类体中。
9.类成员的访问权限 C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。
|