类和对象
来源:互联网 发布:sms水动力学软件 编辑:程序博客网 时间:2024/06/15 02:55
关于C++的一系列学习,不断更新,直到整个C++内容完结。
类是对象的类型,对象是类的实例。
类:电脑
对象:苹果电脑,联想电脑,华硕电脑。
对象的属性:品牌,制造商,内存大小,磁盘大小等。
对象的行为:上网,看视频,发邮件等。
int 是1,2,3的数据类型,1,2,3是int 类型的变量。
一个类里有数据成员,成员变量,静态数据成员,非静态数据成员。
数据成员:用来区分同一个类的不同对象,比如类中有 int a,int b,
静态成员:描述整个类的特征。非静态成员:描述不同对象的特征。
成员变量可以是各种类型:简单类型‘指针、引用、复合类型、其他类。
常量成员:必须在创建一个对象的时候,初始化它的常量成员,且常量成员的值不能修改。
成员函数:用来操作一个类的对象的函数,叫做成员函数。
静态成员函数:属于整个类的成员函数。
把类的数据成员对外隐藏,使之从外部不可见,称为信息隐藏。
成员函数是给外部的访问接口。
一般来数,成员变量为私有(private),成员函数为公有(public)。外部只能通过公有的成员函数才能访问对象,则把对象的私有数据保护起来了。这种方式就是“封装”。
成员函数:基本的有,构造函数,析构函数,get函数,set函数。
(构造函数)
声明对象时,将自动调用构造函数。
构造函数必须公有,因为如果不是公有,就不能调用初始化了。
函数名和类名一样。
没有返回值。
构造函数可以接收参数。
(默认构造函数)
默认构造函数,不是说构造函数一定没有参数,而是说调用时可以不传参。
一个类可以有多个重载的构造函数,靠不同的参数列表来区分。
当中,一定有一个且只能有一个默认构造函数。也就是说创建对象时不需要向构造函数传参。包括两种情况:1.构造函数本身无参数;2.构造函数有参数,但参数都有默认值。
如果程序员一个构造函数都没写,编译器将提供一个空的默认构造函数,它不会对数据成员初始化。对于每个类都写一个默认构造函数,是程序员的一个好习惯。
一旦程序员提供了构造函数,编译器将不提供默认构造函数。
定义对象时参数的个数,要和构造函数参数的个数匹配!
什么情况下可以不写默认构造函数?创建对象时必须传递参数,且类定义时有参数个数与之匹配的构造函数。
什么情况下可以有两个默认构造函数?两个默认构造函数一个无参,一个有参且有默认值,创建对象时必须传递参数。
以下两个构造函数可以声明在同一时间吗?
Thing ( int 1=7,int 2=5) { x = int 1; y=int 2;}
Thing ( ){ x=1;y=1;}
不可以,会产生二义性,即使能区分也不建议这样写。以下两个构造函数可以声明在同一时间吗?
Thing ( int 1,int 2){ x = int 1; y=int 2;}
Thing (){ x=1;y=1;}
可以。Thing ( int int1, intint2){ x = int1; y=int2;}
Thing ( int int1=7,intint2=5){ x = int1; y=int2;}
不!第一个是2个参数的构造函数,第二个是一个默认的构造函数。参数列表是一样的。编译器错误。(重载构造函数)
重载构造函数必须有不同的参数列表。
仅仅返回值不同,是不可以的。
int f(int,int) // O.K.
int f(float,float,float)
int f(int,int) // O.K.
float f(int,int) // illegal
在构造函数的函数头,对类的成员变量进行初始化。
:成员变量(赋给成员变量的值)
赋给成员变量的值:构造函数的参数or常数。
Thing::Thing(intx, int y) //:member1(x) , member2 (y) {}
{
member1= x;
member2 =y;
}
//两种方式作用相同,
初始化列表优势:
1.效率高
2.有一些类型的成员变量,只能用初始化列表的方式初始化,如const引用。
(复合类):复合类的成员变量,是另一个类的对象。
在函数定义时,使用const的三种方法。
(1)函数返回值时const引用,即函数的返回值不能修改。
const int & func(int); //一个函数,返回一个常数int参考
const int & a = func(5);//将返回值赋给另一个const引用才有意义。
(2)函数的参数时const引用,函数体内不能修改参数的值。
int func (constint&); //一个函数,它接受一个恒定的参考参数
(3)const成员函数(只限于类的定义)
int func(int) const{}; //成员函数不能修改成员变量的值。
//常量对象必须调用常量成员函数
For example:
const int& func( const int& ) const;
(析构函数)
3种情况会调用析构函数。
离开对象的作用域。
销毁对象。
删除一个指向对象的指针。
e.g. ~Circle( )
析构函数的特点:
1.无返回值。
2.无参。
3.唯一。
4.公有。
当动态分配内存时,必须显示的销毁分配的堆上的空间,用delete回收指针指向的内存空间,避免内存泄漏。非常重要。
类和对象的主要内容就讲完了,下次讲的是使用类。
有什么建议的欢迎评论讨论,觉得好的也可以赞一个。
- 【面向对象】对象和类
- 面向对象--类和对象
- 面向对象(类和对象)
- 面向对象-类和对象
- 面向对象----类和对象
- 类和对象
- vfp对象和类
- 类和对象
- Chap02:类和对象
- 类、对象和方法
- C#类和对象
- 第一章 类和对象
- 类和对象
- 对象、类和结构
- 类和对象
- 类和对象
- 类和对象
- 类和对象
- 程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零
- 类加载器
- C#中的多态
- luasql-master的修改,支持调用存储过程
- http 原生post 请求
- 类和对象
- 在 Activity 之间传递参数————传递值对象
- 状态机的原理简析及重要用途
- 百度地图获取当前位置坐标,并计算距离
- C#中sealed关键字
- 数据结构基础笔记(一)【严蔚敏】
- noip2003 栈 (卡特兰数)
- shell programing
- iOS导出p12文件