类的指针和引用

C++是使用指针和引用最多的语言,其中的水有多深,只有开发者自己知道。本人菜鸟一枚,也是觉得这个坑太深,每次遇到他们就头疼不已,所以写个demo做个测试,把细节再挖一挖。代码如下:

#include <iostream>
using namespace std;

class myclass
{
public:
    int x;
    int y;
public:
    myclass(int a, int b) :x(a), y(b)
    {
    }
    void printxy();
};
void myclass::printxy()
{
    cout << x << "  " << y << endl;
}
myclass class1(10, 9);
myclass class2(11, 12);
//改变指针方向的两个方法
void change1(myclass **pp)//方法1,传入二级指针
{
    *pp = &class1;
}
void change2(myclass *&pp)//方法2,传入引用的指针的地址
{
    pp = &class2;
}
void main()
{
    myclass *p = &class1;
    p->printxy();
    change1(&p);
    p->printxy();
    change2(p);
    p->printxy();
    cin.get();
}
void mainA()
{

    //myclass *p = new myclass;
    myclass *p(new myclass(10, 9));//调用构造函数初始化
    p->printxy();

    myclass **pp = &p;//二级指针存储一级指针的地址
    (*pp)->printxy();//一级类指针
    (**pp).printxy();//0级类指针
    cin.get();
}

其中这一部分深刻揭示了类的指针的妙用

myclass **pp = &p;//二级指针存储一级指针的地址

(*pp)->printxy();//一级类指针

(**pp).printxy();//0级类指针

同时改变指针方向的方法有两个,就是下面两个函数

void change1(myclass **pp)//方法1,传入二级指针
{
    *pp = &class1;
}
void change2(myclass *&pp)//方法2,传入引用的指针的地址
{
    pp = &class2;
}

main函数输出的结果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 01:05:54

类的指针和引用的相关文章

为什么基类指针和引用可以指向派生类对象,但是反过来不行?

为什么基类指针和引用可以指向派生类对象,但是反过来不行? 基类指针和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基类指针和引用可以指向派生类对象,但是无法使用不存在于基类只存在于派生类的元素.(所以我们需要虚函数和纯虚函数) 原因是这样的: 在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的

More Effective C++----(1)指针与引用的区别 &amp; (2)尽量使用C++风格的类型转换 &amp; (3)不要对数组使用多态

Item M1:指针与引用的区别 指针与引用看上去完全不同(指针用操作符"*"和"->",引用使用操作符". "),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr)、C++对象模型

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr).C++对象模型 一.虚函数表指针(vptr)及虚基类表指针(bptr) C++在布局以及存取时间上主要的额外负担是由virtual引起的,包括: virtual function机制:用以支持一个有效率的"执行期绑定": virtual base class:用以实现多次在继承体系中的基类,有一个单一而被共享的实体. 1.虚函数表指针 C++中,有两种数据

为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?

static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Screen类的定义 //etc... }; 1 2 3 当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间.也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间. 那么我们来看如下代码: class Screen{ Screen sc; //error, 'sc'

[C/C++基础--笔试突击] 7.指针与引用

概述: 比较抽象的但又很有用的东西 0.0 void*指针:可以保存任何类型对象的地址. 指向指针的指针 函数指针 7.1 指针 一个有效的指针必然是一下三种状态之一: 1)保存一个特定对象的地址: 2)指向某个对象后面的另一个对象 3)0值. 若指针保存0值,表明它不指向任何对象.未初始化的指针是无效的,直到给该指针赋值后,才可使用. 注:*p++和(*p)++不等价,单目运算符*的优先级比++高,故*p++先完成取值操作,然后对指针地址执行++操作,而(*p)++是首先执行屈指操作,然后对该

类的对象和类的指针

类的对象和类的指针的区别zz 如下程序: #include <iostream> #include <string> using namespace std; class Student {     public:     static int number;     string name; public:     Student() { } void set(string str)     {        name = str;         number++; // 调用

C++基础回顾2(函数, 指针和引用)

接着回顾函数.指针和应用. 函数 1.多维数组作为形参时,第一维的大小可以省略(也可以不省略),但是其他维的大小必须指定.比如二维数组形参,int array[3][]不正确,int arry[][10]正确.因为实参传来的是数组的起始地址,在内存中按行存放,但并不区分行和列,如果在形参中不指定列数,则系统无法确定应为多少行多少列. 2.在C++中,可以为参数指定默认值,在函数调用时,没有指定与形参相对应的实参就自动使用默认值.C++函数的默认参数可以是常数,也可以是全局变量或全局常量,甚至可以

C++ 中指针与引用的区别

指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化

C++ 指针与引用 知识点 小结

[摘要] 指针可以指向变量.数组.字符串.函数.甚至结构体.即指针可以指向不同数据对象.指针问题 包括 常量指针.数组指针.函数指针.this指针.指针传值.指向指针的指针 等.主要知识点包括:1.指针与引用在概念上的三个区别及其在const.sizeof.自增运算上的差异:2.熟记经典swap函数的指针实现与引用实现,并能反映输出错误的两个函数的思想弊端:3.熟记GetMem函数的错误形式以及错误产生的原因:4.比较数组.指针与静态变量作为函数返回值的差异:5.str.*str以及&str三者