引用&指针&const

1. malloc 和new 的区别

mallocnew
属性C库函数C++运算符
返回类型失败返回NULL,成功返回申请内存的首地址void*类型(需要强制类型转换)失败抛出异常bad_alloc,成功返回对象类型的指针
内存分配需要显式指定内存分配的字节数编译器根据类型,自动分配对象大小的内存空间(会调用malloc),自动调用类对象的构造函数,对类对象进行初始化
释放内存freedelete—调用类的析构函数,调用operator delete函数,调用free函数

2. 把const 加在指针不同的位置是否有区别;

  • const在解引用符号的左边,那么不能通过这个指针来修改指向的内存,但是指针的指向是可以修改的
  • const在解引用符号的右边,那么可以通过这个指针来修改指向的内存,但是指针的指向是不可以修改的

3. const(只读)

对于任何不修改数据成员的函数都应该声明为const成员函数,提高程序可靠性。
不允许把一个const对象的地址赋给一个指向非const对象的指针(不能给修改的机会,可修改的可以给只读,但只读的不能给可修改的)。

  • const 数据成员
    在类的成员函数里都只能调用它,不能改变它。

  • const 成员函数
    const改变了this的类型,变为指向const对象的指针(所以static 成员函数不能声明为const,因为static成员函数没有this指针给const作转换)。不能修改调用该函数的对象,即只能使用对象的数据成员,不能修改这些数据成员。
    在声明和定义的时候都必须加const,调用时不用加。

    int A::get_data(void) const {//const 成员函数
    	return m_data;
    }
    //===》》
    int A::get_data(const A* const this) const {
    	return m_data;
    }
    
  • const 对象
    const对象只能调用const成员函数,不能调用非const成员函数。

#include <iostream>

using namespace std;

class A{
private:
	int m_data;
	const char m_sex;//const 数据成员
public:
	A(int data = 0, char sex = 'm'):m_data(data), m_sex(sex){}
	void set_data(int data){
		m_data = data;
		return ;
	}
	int get_data(void) const {//const 成员函数
		return m_data;
	}
	char get_sex(void) const {
		return m_sex;
	}
	void print() const {

		cout << "m_data=" << get_data() << endl;
		cout << "m_sex=" <<  get_sex() << endl;
		return ;
	}
};

int main(void){

	A a;
	a.print();
	cout << "change data from 0 to 5" << endl;
	a.set_data(5);
	a.print();

	const A aa;//const 对象
	aa.print();

	return 0;
}

4. 引用和指针的区别

  • 引用的本质是指针常量(用的时候理解成别名或者说本体,别管指针),如下

  • int a = 10;
    int &p = a;
    /*====>底层原理:int *const p = &a; p的值初始化之后不可修改,也就是指针指向不可改,也就是引用不可更改,只能绑定一次。*/
    p = 11;
    /*  *p = 11;编译器发现p是引用,自动给p解引用。
    */
    

5. 函数传入值参数和传入引用参数有什么区别

  • 传入值参数,形参要复制一份实参
  • 传入引用参数,函数可以直接访问实参对象,无需复制。

6. 函数返回是引用和非引用的区别

  • 函数返回是非引用类型
    #include <iostream>
    int add(int a, int b){
    	int sum;
    	sum = a + b;
    	return sum;
    }
    int main()
    {
    	int s;
    	s = add(1, 1); //int temp = sum;s = temp;//函数调用处产生的临时对象temp接住函数的返回值
    	return 0;
    }
    
  • 函数返回引用类型时,不会复制返回值,返回的是对象本身。
    #include <iostream>
    int& add(int a, int b){
    	int sum;
    	sum = a + b;
    	return sum;
    }
    int main()
    {
    	int s = add(1, 1);//理解成s接住sum本体的值
    	int &ss = add(1, 1);//理解成ss就是sum本体
    
    	return 0;
    }
    

7. 什么时候需要为传入的引用参数加上const

  • 不会修改所引用的对象

8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?

  • 如果没有标明成员函数或者成员变量的访问权限级别,在struct
    中默认的是public, 而在class 中默认的是private.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值