C++中通过类的对象访问类的成员函数 和通过类的作用域访问成员函数有什么区别啊??
答案:4 悬赏:70
解决时间 2021-01-26 14:47
- 提问者网友:活着好累
- 2021-01-26 06:26
C++中通过类的对象访问类的成员函数 和通过类的作用域访问成员函数有什么区别啊??
最佳答案
- 二级知识专家网友:走死在岁月里
- 2021-01-26 07:02
成员函数被C++编译器扩展为一个外部函数,类的所有对象共享一份成员函数,只要知道了正确的类型,编译器就能找到函数入口地址。
但如果这个函数用到了类的成员变量就会crash。因为成员变量是专属于每一个对象的!
所以本质就是因为this指针作怪!成员函数里面没有用到this指针,程序就不会出现问题!
但如果这个函数用到了类的成员变量就会crash。因为成员变量是专属于每一个对象的!
所以本质就是因为this指针作怪!成员函数里面没有用到this指针,程序就不会出现问题!
全部回答
- 1楼网友:未来江山和你
- 2021-01-26 10:26
我觉得 第一个是针对 指定的 对象 ,第二个 有吗?
- 2楼网友:独钓一江月
- 2021-01-26 09:18
类的对象调用类的成员函数,用 '.' 操作符,对象是类的一个实例化,可以使用类中定义的操作。
而作用域操作符,是用来说明成员是属于哪个类,或者在类外定义函数时所用的,说白了还是指明函数属于哪个类。
而作用域操作符,是用来说明成员是属于哪个类,或者在类外定义函数时所用的,说白了还是指明函数属于哪个类。
- 3楼网友:罪歌
- 2021-01-26 07:53
第一个是对一个具体的对象调用,用“.”
第二个是代表这是哪个类内的成员函数
例如
class point
{
public:
void output();
}
class MyPoint
{
public:
void output();
}
你分别在两个类里面 定义了叫output的函数 但是你还没写这两个函数 只是声明
然后再下面 或者再另一个文件中
你可以具体实现这两个函数
这时候如果直接写
void output() { }
编译器就不知道你是哪个类里的函数了
所以如果你要实现point里的函数 就要
void point::output() {}
Mypoint里的就是
void Mypoint::output() {}追问既然可以通过实例化的对象访问成员函数,为什么还要设计一个作用域?
第二个是代表这是哪个类内的成员函数
例如
class point
{
public:
void output();
}
class MyPoint
{
public:
void output();
}
你分别在两个类里面 定义了叫output的函数 但是你还没写这两个函数 只是声明
然后再下面 或者再另一个文件中
你可以具体实现这两个函数
这时候如果直接写
void output() { }
编译器就不知道你是哪个类里的函数了
所以如果你要实现point里的函数 就要
void point::output() {}
Mypoint里的就是
void Mypoint::output() {}追问既然可以通过实例化的对象访问成员函数,为什么还要设计一个作用域?
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯