【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针

来源:互联网 发布:淘宝网棉麻女装 编辑:程序博客网 时间:2024/05/16 15:40

非引用形参

//交换函数,传递的实参只是参数的副本。并不能起到交换作用void swap(int a, int b) {    int m  = a;    a = b;    b = m;}

指针形参

//可以起到交换作用void swap(int *a, int *b) {    int m  = *a;    *a = *b;    *b = m;}

引用形参

//可以起到交换作用void swap(int &a, int &b) {    int temp = a;    a = b;    b = temp;}

const形参

用const修饰形参,避免实参被修改

string::size_type length(const string &str) {    return str.size();}

用数组作为形参

//1void m(int a[]) {    cout << a[0] <<  endl;}//2void m(int *a) {    a[0] = 3;    cout << a[0] <<  endl;}int a[] = {1, 2, 3};m(a);

也可以使用const数组形参
一般使用非const形参,实参会复制一份传递。
但是针对数组,数组会悄悄转为指针,参数传递是这个指针的副本,指向数组第一个元素,更改这个值,也就可以改变数组元素的值,这里不能通过计算得到数组的大小,必须使用第二个参数来告诉函数传进来的数组的大小

 int a[] = {1, 2, 3, 4, 5}; cout << a << endl; cout << sizeof(a) << endl;//20//必须显示的把数组元素大小传进去int sum(int arr[], int n) {    int total = 0;    cout << sizeof arr << endl;//4 是一个元素的大小    for (int i = 0; i < n; i++) {        total += arr[i];    }    return total;}

返回非const对象

把要返回的对象复制一个副本返回回去

const string getString(const string &str1, const string &str2) {    return str1.size() < str2.size()? str1 : str2;}

返回cons对象

没有复制直接返回原对象,但是千万不要返回局部对象的引用,因为函数运行完这些对象要销毁

const string &getString(const string &str1, const string &str2) {    return str1.size() < str2.size()? str1 : str2;}

类的成员函数

class Person {public:    bool isAgeSame(const Person &person) const {        return age == person.age;    } ;private:    string name;    int age;};
Person p;p.isAgeSame(person);
//cosnt成员函数不能修改调用者。bool isAgeSame(const Person &person) const {        return age == person.age;    } ;

当调用p.isAgeSame(person);会有一个隐含的this形参,相当于
bool isAgeSame(const Person &this, const Person &person) const;
后面的const表示const成员函数,不能修改this对象。

函数指针

//定义一个函数int m(int a) {    return a;}int (*pf)(int);//声明一个函数指针,只需要把函数名换成(*pf)auto f = m;//使用auto的一个函数指针 pf = m;//函数指针赋值必须要写在main方法里面 f(5); (*pf)(5);

使用函数指针可以把函数作为函数的参数

//声明一个函数int m(int a) {    return a + 1;}//使用函数指针作为函数的参数int change(int num, int (*pf)(int) ) {   return (*pf)(num);}int main() {//把函数传进去    cout << change(5, m) << endl;    return 0;}
0 0
原创粉丝点击