类和对象

我的博客:竹山听雨

文章目录

  • 类和对象
    • 类的定义
      • 类中成员函数的定义
        • 外联函数
      • 内联成员函数
    • 对象
      • 对象定义
      • 成员的访问
        • 名字解析与this指针
        • 带缺省参数的成员函数和函数重载成员函数
    • 构造函数和析构函数
    • 对象成员
    • 静态成员
      • 静态数据成员
      • 静态成员函数
    • 指向类成员的指针
      • 由类外指向类内的指针变量
      • 类外指向成员函数的指针数据
      • 指向类内静态成员的指针

类的定义

class 类名
{private://私有数据成员和成员函数public: //公有数据成员和成员函数protected: //受保护的数据成员和成员函数
}

注意: 定义类时,不允许初始化数据成员

类中成员函数的定义

外联函数

在类外定义成员函数时,必须在函数名前缀上加上类名,在之间加上::,若不加类名,则成为全局数据或全局函数

返回值类型 类名:: 成员函数名
{}void Student::set(int a,int b)
{....
}

内联成员函数

程序编译时将内联成员函数的代码插入在函数的每个调用处,作为函数体的内部扩展

class Student{public:void set(int sid,string name){....}
}

或者再关键字前面添加inline,可以在类定义体外的函数声明为内联函数

inline void set()
{...}
或
void inline set()
{}

对象

在面向对象开发的软件系统中,对象是类的实例,是属性与服务的封装体。一个对象就是一个实际问题中的实体。

对象定义

方法一:

class Student
{public:void set();private:int id;...
}student1

方法二:

class Student
{public:void set();private:int id;...
}
Student student1;

成员的访问

定义了类及其对象,就可以定义成员函数实现对对象内部属性的访问。

公有(public),内部外部都可以进行范围

  • 通过对象调用成员

对象名.公有成员

  • 通过指向对象的指针调用成员

指向对象的指针->成员

  • (*对象指针名).公有成员

只有用public定义的共有成员才能使用远点运算符访问,对象中私有成员只有通过该类的公有成员函数来访问他们

名字解析与this指针

名字解析: 在调用成员函数时,通常使用缩写形式.因此可以定义两个或多个类的具有相同名字的成员而不会产生二义性

this指针: 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向接受该函数调用的对象,在程序中可以使用关键字this来引用该指针。

void Tdate::set(int m,int d,int y)
{month=m;day=d;year=y;
}
Tdate dd;
Dd.set(3,11,28);
//当调用成员函数set时,该成员函数的this指针指向类Tdate的对象dd。成员函数set中对month,day,year的引用表示引用对象dd的数据成员。C++语言编译器所认识的成员函数set的定义形式为
void Tdate::set(int m,int d,int y)
{this->month=m;this->day=d;this->year=y;
}

即对该成员函数中访问的类的任何数据成员,C++语言编译器都认为访问this指针所指向对象的成员。使用this指针,保证了每个对象可以拥有不同的数据成员值,但处理这些数据成员的代码被共享

带缺省参数的成员函数和函数重载成员函数

类的成员函数也可以带缺省值的函数,其调用规则同普通函数。成员函数也可以是重载函数,类的成员函数的重载与全局函数的重载方法相同

构造函数和析构函数

当建立一个对象时,对象的状态(数据成员的取值)是不确定的。构造函数是C++中一个特殊的成员函数,它可自动进行对象的初始化。而析构函数在对象撤销时执行清理任务,进行善后处理

特性

  • 没有返回值说明,也就是定义构造函数和析构函数不能指出函数返回值得类型,void也不能有

  • 它们不能被继承

  • 构造函数可以有缺省常熟

  • 析构函数可以是虚的,单构造函数不可以是虚的

  • 不可取他们的地址

  • 不能用常规调用方法调用析构函数,当使用完全的限定名(带对象名。类名和函数名)时,可以调用析构函数

  • 当定义对象时,编译程序自动调用构造函数,当删除对象时,编译程序自动地调用析构函数

对象成员

对象成员也称为类的聚集,是指在类的定义中,数据成员可以为其他类的对象,即类对象作为另一个类的数据成员

静态成员

静态成员的特征是不管这个类创建了多少个对象,而静态成员就只有一个副本,这个副本被这个类的所有对象共享

静态数据成员

class A{Static float x,y;Int a,b;
}

实际上可以将静态数据成员看成一个全局变量,将其封装在某个类中通常有两个目的

  • 限制该变量的作用范围,只能由该类对象的函数成员直接访问
  • 将意义相关的全局变量和相关的操作物理地放一起,便于可读

格式:

<数据类型><类名>::<静态数据成员名>=(初始值);

类外初始化

Int A:X=5;
Int A:Y=10;

静态成员函数

静态成员函数内无this指针,他是同类所有对象的共享资源,只有一个副本,因此不能直接访问非静态的数据成员必须通过某个该类对象才能访问。

而一般的成员函数都含有一个this指针,指向对象自身,可以直接访问非静态的数据成员

class x
{int member_int;staic int static_int;public:statc void func(int i);...
}
void x::func(int i)
{member_int=i; //会报错static_int=j; //正确obj.member_int=i;//正确,指定了被引用的对象...
}
  • 静态成员函数中访问的基本是静态数据成员或全局变量
  • 由于静态成员函数属于类独占的成员函数,因此访问静态成员函数的消息接受者不是类对象,而是类自身
  • 静态成员函数不能是虚函数

指向类成员的指针

C++提供一种特殊的指针类型,它指向类的成员,而不是指向该类的一个对象中该成员的一个实例

由类外指向类内的指针变量

类型付 类名:: *指针名=地址

class A{public:int i,*p;a(){i=10;p=&i;}
}
int A::*p=&a::i;  //p是类外指针

类外指向成员函数的指针数据

类型名(类名:: *指针名)(参数类型表)=&类名::函数名

class A
{int i;public:int set(int k){i=++k;return i;}
}
void main()
{int A(A::*f)(int)=&A::set;A aa;cout<<(aa *f)(10)<<endl;
}

指向类内静态成员的指针

  • C++语言不检查静态成员处于何处
  • 必须在全局区用"数据类型 类名::静态变量名[=…];"
class A{public:staic void set(...){...}
};
void(*f)(int)=&a::set;

C++学习笔记(一)——类和对象相关推荐

  1. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  2. 冰冰学习笔记:类与对象(上)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  3. 冰冰学习笔记:类与对象(下)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  4. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  5. unity让对象作为参数_C#+Unity学习笔记:类与对象

    参考文献 蜜酒厅通讯社 游戏部 石中居士 对象(object):有状态.行为和身份的东西. 状态(state):表示物体特征的信息,可以用来跟踪对象的状态. 属性(properties):因为编程人员 ...

  6. Java学习笔记1——类和对象

    面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...

  7. Head First Java学习笔记(2):类与对象

    类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...

  8. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  9. C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

    3--类与对象 在我们熟悉的现实世界中,一切事物都是 对象 .对象可以是有形的,也可以是无形的. 对象可以是一个个体,也可以是由诸多其他对象组成. C++支持这种抽象,将抽象后的数据和函数封装在一起, ...

  10. HOW2J.CN - 学习笔记(类和对象)

    引用 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用. 1. 引用和指向 new Hero(); 代表 创建 了一个Hero对象 但是也仅仅是创建了一个对象,没有办法访问 ...

最新文章

  1. Anaconda创建环境、删除环境、激活环境、退出环境
  2. 如何将数据导入到 SQL Server Compact Edition 数据库中(四)
  3. css浮动(float)及清除浮动的几种实用方法
  4. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
  5. 广东48.6万人资产超600万 华东超600万人群最多
  6. MySQL5.7 安装(win)
  7. UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)
  8. 为什么SpringBoot的jar可以直接运行
  9. javascript-抽象工厂模式
  10. OpenLDAP的安装和配置(含TLS和复制)
  11. java Vector.toArray 与强制类型转换
  12. Binary XML file line #23: Error inflating class android.widget.TextView
  13. w ndows10怎么没体验指数,Win10没有“Windows体验指数”功能怎么进行系统评分【图文】...
  14. win7修复计算机消失,Win7一键修复丢失DLL,常见dll丢失一键修复方法
  15. 如何从零开始建立起一个公司的运维体系?
  16. 编程入门前应该先学什么?
  17. C++输入一系列数字,以换行结束输入
  18. self的用法与意义(一)
  19. 买投影仪选当贝还是极米,哪个投影仪最好用
  20. IDEA/GoLand 添加自定义特殊注释【注释高亮】

热门文章

  1. MySQ随笔2(连接表、分组)
  2. 使用角色管理工具 安装或配置microsoft.net framework 3.5 sp1
  3. 梦想是如何失去的?看小米和魅族发布有感
  4. Tomcat—启动时控制台显示文字的颜色
  5. 单元素的枚举类型已经成为实现Singleton的最佳方法
  6. 史上最全的Maven Pom文件标签详解
  7. Java基础IO流(知识体系详解)【五】
  8. js随机获取数组中的值
  9. jQuery实现title提示效果
  10. 记录下Visual Studio中的快捷键