C++ 基础 命名空间 类头文件 类的实现写法

本文详细介绍了C++中的引用和指针概念,并对比了两者的区别。讲解了引用作为变量别名的特点,以及其在函数参数传递中的优势。同时,文章还探讨了C++中的内存管理,包括堆、栈等不同内存区域的用途。
C++ 完全兼容C

命名空间 (类似于java package概念)
一.什么是引用
堆(heap)空间:
动态分配的内存(malloc 等api 分配在堆空间, c++中的new)
堆用于存放进程运行时动态分配的内存段,可动态扩张或缩减。堆中内容是匿名的,不能按名字直接访问,只能通过指针间接访问。
栈(stack)空间:
局部变量、函数参数、返回地址等(系统自动分配的临时内存)Linux有专门的寄存器管理栈内存(效率高)
.bss段
未初始化或初值为0的全局变量和静态局部变量

.data段
已初始化且初值非0的全局变量和静态局部变量

.text段
可执行代码、只读变量,全局静态变量
通过sizeof(A)看大小

1. 教课书上说的是引用是原变量的一个别名.
 n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有个人叫是JackMa,绰号是“马爸爸”。说“马爸爸”怎么怎么的,其实就是在说JackMa。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n就是m 它自己。
 
 c++中的引用 (就是再堆中分配空间)
 //1.单纯给变量取别名没有任何意义,作为函数参数传递,能保证参数传递过程中不产生副本
 //2.引用可以直接操作变量,指针要通过取值(*p),间接操作变量,指针的可读性差
2. java的引用和句柄
java中的句柄;(构造函数的作用)
内存分配在堆空间, 引用和句柄分配在栈空间
3. java中的引用(强引用,弱引用,软引用,虚引用)

引用是面向对象的概念,指针是面向过程种的概念,C++能够混编C语言,所以C++支持指针

举例说明 c++中引用和指针使用的差别


二.指针和引用的区别

  1. 指针是一个实体,而引用仅是个别名;

  2. 引用使用时无需解引用(*),指针需要解引用;

  3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

    引用“从一而终” ^_^

  4. 引用没有 const,指针有 const,const 的指针不可变;

  5. 引用不能为空,指针可以为空;

  6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

 
 常用的引用方式(指针的引用---代替二级指针)
//命名空间 ::
namespace TestNameSpace {
    struct Teacher{
        int a;
    };
}
using namespaceTestNameSpace;
int main(){
    TestNameSpace::Teacher teacher;
    teacher.a =10;
}
//类头文件
#ifndef MyTeacher_hpp
#define MyTeacher_hpp
class MyTeacher{
public:
    MyTeacher(); //构造函数malloc    ~MyTeacher();//析构函数释放在构造函数里面动态申请的内存 (free)
    void setAge(int age);
    int getAge();
    void setName(char *name);
    char* getName();
private:
    int age;
    char *name;
};
#endif /* MyTeacher_hpp */
//类的实现 这个中的::是限定符的意思

#include "MyTeacher.hpp" #include <iostream> #include <stdio.h> MyTeacher::MyTeacher(){     std::cout <<" MyTeacher构造函数"<<this<<std::endl; } MyTeacher::~MyTeacher(){    std::cout <<" MyTeacher析构函数"<<this<<std::endl; } void MyTeacher::setAge(int age){     this->age = age; } int MyTeacher::getAge(){     returnthis->age; } char* MyTeacher::getName(){     returnthis->name; } void MyTeacher::setName(char *name){    std::cout <<" MyTeacher设置名字:"<<name<<std::endl;     this->name = name; }


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值