C语言中等号右边的星号怎么用呢

caterpillarous 2015-11-21 03:54:32
网上看到这样一个程序
#include <iostream>
using namespace std;

//男人类
class boy
{
public: //他敞开胸怀
void LoveYou()
{
cout << "Jessica, I love you, marry me!" << endl;
}
void KissYou()
{
cout << "Jessica, you are too sexy, I want to kiss you..." << endl;
}
};

//上帝说女人是男人的肋骨做的,所以女人就由男人派生出来吧……
class girl : public boy
{
public: //她也敞开胸怀……我什么都没看见 -_-!
void LoveYou()
{
cout << "I love you too...But I am too shy to say..." << endl;
}
void KissYou()
{
cout << "You do what you want..." << endl;
}
};

void main(void)
{
boy A1Pass; //一个男孩叫A1Pass ^_^
girl Jessica; //一个女孩叫杰西卡

boy *the_A1Pass_home = &Jessica;
girl *the_Jessica_home = &Jessica;

//////////////////////////////////////////
//------他们在干什么呀?请写出结果---------

the_A1Pass_home ->LoveYou();
the_Jessica_home->LoveYou();

the_A1Pass_home ->KissYou();
the_Jessica_home->KissYou();

//////////////////////////////////////////
}


结果是:Jessica, I love you, marry me!
I love you too...But I am too shy to say...
Jessica, you are too sexy, I want to kiss you...
You do what you want..

这个问题我能够解决 问题是下面的
将声明内容中的 boy *the_A1Pass_home = &Jessica;
girl *the_Jessica_home = &Jessica;
改为
boy *the_A1Pass_home = &A1Pass;
girl *the_Jessica_home = (girl *)&A1Pass;
或者
boy *the_A1Pass_home = NULL;
girl *the_Jessica_home = NULL;
输出结果仍然不变
这是为什么呢

改动后第一种情况中,我看不懂girl *the_Jessica_home = (girl *)&A1Pass; 这一句等号右边的 (girl *)&A1Pass
我感觉等号右边是变成了一个指针 但是没法描述是一个怎样的指针
还有就是第二种改动中为什么两个指针都等于NULL了还可以去调用函数呢
查了很久无果 希望大家赐教
...全文
336 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
caterpillarous 2015-11-23
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
感谢 第二本正在看 虽然有很多看不懂 但还是收获很多
赵4老师 2015-11-23
  • 打赏
  • 举报
回复
《深度探索C++对象模型》 《C++反汇编与逆向分析技术揭秘》
caterpillarous 2015-11-22
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 caterpillarous 的回复:] [quote=引用 1 楼 paschen 的回复:] 改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
既然指针指向NULL了,我还是不懂为什么就可以引用类中的函数了呢。
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
我还是不太明白,指针明明指向了NULL,那为什么可以调用类中的函数呢。还有几个问题 1.假如定义一个*p指针指向了一个自定义类,那么这个指针的大小应该就是整个类的大小吧? 2.是不是可以说boy *p和boy p的效果是一样的呢,假如*p没有指向一个对象,那么*p本身是否就可以称作是boy类的一个对象呢 谢谢版主[/quote] 1、指针大小是4(32位下) 2、如果p没指向有效对象,你用*p可能会出错 (指针的类型只是表示按这种类型去解释所指向地址中的数据而已)[/quote] 我似乎明白了 &A1Pass下存的只是数据,类中的函数在内存中只有一份 所以调用函数(准确的说是无参数的函数)与该指针所指向的地址无关
caterpillarous 2015-11-22
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 caterpillarous 的回复:] [quote=引用 1 楼 paschen 的回复:] 改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
既然指针指向NULL了,我还是不懂为什么就可以引用类中的函数了呢。
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
我还是不太明白,指针明明指向了NULL,那为什么可以调用类中的函数呢。还有几个问题 1.假如定义一个*p指针指向了一个自定义类,那么这个指针的大小应该就是整个类的大小吧? 2.是不是可以说boy *p和boy p的效果是一样的呢,假如*p没有指向一个对象,那么*p本身是否就可以称作是boy类的一个对象呢 谢谢版主[/quote] 1、指针大小是4(32位下) 2、如果p没指向有效对象,你用*p可能会出错 (指针的类型只是表示按这种类型去解释所指向地址中的数据而已)[/quote] 这个情况下 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; the_Jessica_home指向的是A1Pass的地址 但是A1Pass地址下不是应该只有基类中的两个函数吗 可以将这个地址中的内容解释成派生类中的函数吗 我还是不太明白
paschen 版主 2015-11-22
  • 打赏
  • 举报
回复
引用 2 楼 caterpillarous 的回复:
[quote=引用 1 楼 paschen 的回复:] 改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
既然指针指向NULL了,我还是不懂为什么就可以引用类中的函数了呢。
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
我还是不太明白,指针明明指向了NULL,那为什么可以调用类中的函数呢。还有几个问题 1.假如定义一个*p指针指向了一个自定义类,那么这个指针的大小应该就是整个类的大小吧? 2.是不是可以说boy *p和boy p的效果是一样的呢,假如*p没有指向一个对象,那么*p本身是否就可以称作是boy类的一个对象呢 谢谢版主[/quote] 1、指针大小是4(32位下) 2、如果p没指向有效对象,你用*p可能会出错 (指针的类型只是表示按这种类型去解释所指向地址中的数据而已)
caterpillarous 2015-11-22
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
既然指针指向NULL了,我还是不懂为什么就可以引用类中的函数了呢。
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
我还是不太明白,指针明明指向了NULL,那为什么可以调用类中的函数呢。还有几个问题 1.假如定义一个*p指针指向了一个自定义类,那么这个指针的大小应该就是整个类的大小吧? 2.是不是可以说boy *p和boy p的效果是一样的呢,假如*p没有指向一个对象,那么*p本身是否就可以称作是boy类的一个对象呢 谢谢版主
paschen 版主 2015-11-22
  • 打赏
  • 举报
回复
引用 5 楼 caterpillarous 的回复:
[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 caterpillarous 的回复:] [quote=引用 1 楼 paschen 的回复:] 改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
既然指针指向NULL了,我还是不懂为什么就可以引用类中的函数了呢。
引用 1 楼 paschen 的回复:
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了
我还是不太明白,指针明明指向了NULL,那为什么可以调用类中的函数呢。还有几个问题 1.假如定义一个*p指针指向了一个自定义类,那么这个指针的大小应该就是整个类的大小吧? 2.是不是可以说boy *p和boy p的效果是一样的呢,假如*p没有指向一个对象,那么*p本身是否就可以称作是boy类的一个对象呢 谢谢版主[/quote] 1、指针大小是4(32位下) 2、如果p没指向有效对象,你用*p可能会出错 (指针的类型只是表示按这种类型去解释所指向地址中的数据而已)[/quote] 我似乎明白了 &A1Pass下存的只是数据,类中的函数在内存中只有一份 所以调用函数(准确的说是无参数的函数)与该指针所指向的地址无关[/quote] 是的,类对象中是不存成员函数与静态成员变量的
paschen 版主 2015-11-21
  • 打赏
  • 举报
回复
改为 boy *the_A1Pass_home = &A1Pass; girl *the_Jessica_home = (girl *)&A1Pass; 是让指针指向与A1Pass相同的地址,但是是按girl类型解释该内存内容,相当于强制转换指针类型 第二个问题是因为你成员函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,虽然此时的this指针是NULL。但如果你的成员函数需要用到成员变量时,你程序就会崩了

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧