Chapter 7 类和对象的特性(中篇)

发布时间:2024年01月11日

目的:了解类,全面认识C++

📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊

7.3 类的成员数据

1.类的成员函数(简称:类函数)是函数的一种,他是有类型和返回值的,他与一般函数的区别是:他是属于一个类的成员,出现在类体中,可以被指定为private、public、protected

2.在使用成员函数时,要注意访问属性,在后面我们会提到

3.类外定义成员函数和类里定义成员函数的区别

在类外:

#include <iostream>
using namespace std;
class Student
{
  public:
     void display();
  private:
     int num;
     string name; 
};
void Student::display()//在类外定义
{
   cout<<num<<name<<endl;
}

在类里:

?
#include <iostream>
using namespace std;
class Student
{
  public:
    void Student::display()//类里定义
{
   cout<<num<<name<<endl;
}

?
  private:
     int num;
     string name; 
};

?补充—成员函数的定义:

a:如果是小函数可以适当放在类里

b:如果在成员外定义成员函数,那么就要在类里进行原型声明

c:在类外定义成员函数,就要给予限定(参考第一个代码),必须在函数名前加上类名,“ ::”是作用域限定符(别名:作用域运算符),如果没有“::”则不是Student中的display函数

d:若在“ ::”前面没有类名,或者函数名前面即无类名又无作用域运算符,表示这个函数不属于任何一个类型,这个函数也不是成员函数,例如::display()或display()

4.内置成员函数

a:如果成员函数中不包括循环体等控制结构,C++系统自动地对它们作为内置函数处理

b:因为一般成员函数的内容都会很小,但是调用函数的时间又往往大于执行的时间,所以弄成内置函数是为了减少时间的开销

d:但成员函数不在类里定义而在类外定义时,系统是不会默认它时内置函数的

e:在一般函数要成为内置函数时,在声明加inline和定义处加inline都是可以的(二选一),但在类外定义的成员函数时,则必须在定义和声明处都要加上inline

4.成员函数的存储方式

a:在类定义对象时,系统会为每一个对象分配存储空间

b:同一类的不同对象中国的数据成员一般是不相同的,而不同对象的函数的代码是相同的,不论调用哪一个对象的函数代码,其实调用的都是同样的内容代码,我觉得跟一句话有关“类是对象的抽象,对象是类的特例

d:不论成员函数是在类外定义还是在类内定义,成员函数的代码段的存储方式是相同的,都不会占用对象的存储空间

f:不要将成员函数的这种存储方式和inline(内置)函数的概念搞混了,但不论是否使用inline声明,成员函数的代码段都不占用对象那个的存储空间,inline函数只影响程序的执行效率,而与成员函数是否占用对象的存储空间无关

g:虽然成员函数并没有放在对象的存储空间中,但从逻辑的角度,成员函数是和数据一起封装在一个对象中的,只允许本对象中成员的函数访问同一对象的私有数据

📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊

8.4 怎样访问对象的成员

1.有三种方法:

a:通过对象名和成员运算符访问对象中的成员

b:通过指向对象的指针访问对象中的成员

c:通过对象的引用访问对象中的成员

2.通过对象名和成员运算符访问对象中的成员

a:形式:对象名.成员名

b:调用范围:不仅可以在类外引用对象的公用数据对象,而且还可以调用对象的公用成员函数,但是必须指出对象那个名,但也只能访问public成员,而不能访问private成员

c:在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作

3.通过指向对象的指针访问对象中的成员

class Time
{
  public:
   int hour;
   int minute;
};
Time t,*p;
p=&t;
cout<<p->hour;

4.通过对象的引用访问对象中的成员

Time t1;
Time &t2=t1;
cout<<t2.huor;

共同学习,欢迎指正!

文章来源:https://blog.csdn.net/2301_80903601/article/details/135521401
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。