基础知识&左值&this指针

  1. 左值代表着一块可以被更新的内存区域,可以被取地址,右值不能被取地址。

  2. 初始化是指创建对象的同时给它赋初值,赋值是擦除对象的当前值并用新值代替。

  3. 内存泄漏是调用了malloc/new等内存申请操作,但是缺少对应的free/delete来释放内存。

  4. 类的定义不会引起数据的内存分配,实例化对象才会给这个对象分配存储空间。(类对象所占的存储空间等于它的数据成员所占的空间(不包含成员函数代码所占的空间),每个类对象都有自己的数据成员。)

  5. 类的声明

    //定义两个类A和类B, 类A中有一个指向类B对象的指针,类B中有一个类A的对象。
    #include <stdio.h>
    class B;//类的声明一般用于定义指向该类型的指针和引用。没有定义,不能实例化
    //用于编写具有依赖关系的类。
    class A
    {
    	B* pB;
    	B &func(B *b, B &bb) { b = NULL; } //用于使用该类型作为函数形参类型或者返回值类型
    };
    class B{
    	A aobj;
    };
    
    int main()
    {
    	return 0;
    }
    
  6. 在C++中类和结构体有两点不同:

    • class默认的成员属性是private ,struct默认的成员属性是public。
    • 在继承层面:class默认的继承方式是私有继承,而struct默认的继承方式是公有继承。
  7. 内联函数

  • 内联函数是为了解决C++预处理宏存在的问题(1、宏不能访问对象的私有成员。2、宏的定义很容易产生二义性。)所提出一种解决方案,用来提高程序的运行效率。

  • 在调用内联函数时,并不真正执行函数的调用过程,只是把函数的代码嵌入到程序的调用点,减少了函数调用的开销。

    内联函数使用inline关键字定义。
    关键字和函数定义必须结合在一起,否则编译器将它作为普通函数对待。
    在类内部定义的成员函数自动视为内联函数,不需要加关键字inline。
    内联机制适用于优化小的,只有几行的,且频繁被调用的函数(如获取或者设置类数据成员的函数)。
    类的普通成员函数一般在源文件内定义,类的内联成员函数最好在头文件中定义。

  1. this指针
    C/C++中的成员函数,相当于C中的函数,只是被编译器改过名字,并增加一个this指针参数(对象的地址),通过偏移量来访问对象的数据成员。所以对象的大小和函数无关,实际上是通过类的作用域呼叫函数。

    每个成员函数都有一个隐含的形参this,指向调用成员函数的类对象。
    在调用成员函数时,this被初始化为调用函数的类对象的地址

#include <iostream>
class Student{
private:
	int age;
public:
	void setAge(int age){//在成员函数中,不需要显式的使用this指针来访问对象的成员,默认其成员为通过指针this实现的引用。除了形参名和数据成员名字一样的情况,如果没有this就近原则就容易出错。

		this->age = age;
	}
	Student &getObj(){//当需要将一个类对象作为整体引用时,需要显式的使用this。
		//code...
		return *this;//一般是赋值运算符重载,连续赋值会用到
	}
};
int main()
{
	Student stu1;
/*
(gdb) p &stu1
$1 = (Student *) 0x7fffffffdf10
*/
	stu1.setAge(18);
/*
(gdb) s
Student::setAge (this=0x7fffffffdf10, age=18) at this.cpp:7
7                       this->age = age;
*/
	stu1.getObj().setAge(17);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值