day_04_类的定义和实例化、构造函数和初始化表
来源:互联网 发布:制作假证件软件 编辑:程序博客网 时间:2024/05/21 07:47
- 十三类的定义和实例化
- 1类的语法形式
- 2访问控制限定符
- 3构造函数Constructor
- 4对象的创建和销毁
- 5多文件编程
- 十四构造函数和初始化表
- 1构造函数可以重载也可以带有缺省参数
- 2缺省构造函数
- 3类型转换构造函数单参构造函数
- 4拷贝构造函数重难点
- 十三类的定义和实例化
十三、类的定义和实例化
1、类的语法形式
struct/class 类名:继承表{访问控制限定符: 类名(形参表):初始化表{} //构造函数 ~类名(void){} //析构函数 返回类型 函数名(形参表)[const]{} //成员函数 数据类型 变量名; //成员变量}
2、访问控制限定符
public:公有成员,在类的外部和内部都可以访问的成员;
private:私有成员,只能在类的内部访问的成员;
protected:保护成员,在类的内部和子类中可以访问的成员;
eg:
struct/class { eee; //struct默认公有成员,class默认私有成员 public: aaa; //公有成员 private: bbb; //私有成员 public: ccc; ddd;};
3、构造函数(Constructor)
class 类名{ 类名(形参表){} //构造函数}
1)函数名和类名相同,没有返回类型;
2)构造函数在对象被创建时自动被调用;
3)构造函数主要负责初始化对象,即初始化成员变量;
4、对象的创建和销毁
1)在栈区创建单个对象
类名 对象(构造实参表);
类名 对象 = 类名(构造实参表);
注意:
如果构造函数没有参数,类名 对象;
或类名 对象 = 类名();
2)在栈区创建对象数组
类名 对象数组[元素个数] = {类名(构造实参表), … };
3)在堆区创建单个对象
创建:
类名* 对象指针 = new 类名(构造实参表);
销毁:
delete 对象指针
4)在堆区创建对象数组
创建:
类名* 对象指针 = new 类名[元素个数]{类名(构造实参表), ...}
销毁:
delete[] 对象指针;
练习:实现一个电子时钟,用构造函数接收当前系统时间,可以以秒为单位运行;
class Clock{public: Clock(time_t t){ //time_t = long int; tm* local = localtime(&t); m_hour = local->tm_hour; ... } void run(void){ while(1){ //打印当前时间 printf("\r%02d:%02d:%02d", m_hour, m_min, m_sec); // 刷新标准输出缓冲区 fflush(stdout); //计时加1 //sleep(1) } }private: int m_hour; int m_min; int m_sec;};int main(void){ //time(NULL):获取当前系统的时间 Clock clock(time(NULL)); clock.run();}
5、多文件编程
1)类的声明部分放在xx.h文件中;
2)类的实现部分放在xx.cpp源文件中;
3)使用该类的代码一般会在其它的文件中;
练习:将Clock类拆分成多文件形式;
十四、构造函数和初始化表
1、构造函数可以重载也可以带有缺省参数
2、缺省构造函数
如果一个类没有定义任何构造函数,编译器会提供一个缺省构造函数(无参构造函数);
1)对于基本类型成员不做初始化;
2)对于类 类型成员变量,会自动调用相应类的无参构造函数来初始化;
注意:
如果定义了构造函数,无论是否有参数,编译器都不会提供缺省构造函数了;
3、类型转换构造函数(单参构造函数)
class 目标类型{ 目标类型(源类型 src){...}};// 可以实现源类型到目标类型的隐式转换
注意:
使用explicit(adj.外在的/ iks’plisit /)关键字修饰该构造函数,可以强制这种通过构造函数实现的类型转换必须显示的完成。
4、拷贝构造函数(重难点)
1)用一个已经存在的对象构造同类型的副本对象,会调用拷贝构造函数;
语法:
类名(const 类型& that){//完成成员的拷贝}
eg:
class A{ public: A(const A& that){...}};A a1; // 无参方式构造a1A a2(a1); // 调用拷贝构造函数来构造a2A a2 = a1; // 和上面等价
- day_04_类的定义和实例化、构造函数和初始化表
- Unit03: 类的定义与实例化 、 构造函数与初始化表 、 this指针与常函数
- C++实例---虚基类的构造函数和初始化
- java类的初始化和构造函数
- 构造函数和初始化表
- 构造函数和初始化表
- Java初始化-静态代码块、实例化代码块和构造函数的区分
- 构造函数和实例化
- 构造函数和初始化列表的区别
- 1.构造函数和复制构造函数相关的初始化
- 构造函数初始化列表和构造函数的区别
- 函数的定义、声明、初始化和赋值
- 构造函数的定义和构造函数的重载
- C++类构造函数和初始化列表
- C++类使用构造函数初始化类表和构造函数函数体中赋值的区别
- C++类使用构造函数初始化类表和构造函数函数体中赋值的区别
- c++对象的定义和构造函数
- 构造函数和实例:
- qq登陆
- VS 2013 professional版在win10上安装出错的解决方法
- Unity优化总结(时更)
- js获取当前时间
- java处理文件上传的底层实现
- day_04_类的定义和实例化、构造函数和初始化表
- idea创建maven web项目
- [学习笔记]Devexpress在MVC上扩展组件,Navbar与TreeView
- pycharm 项目到github
- 一款清新的jQuery日历插件 带日期的Tooltip提示
- 深入了解android平台的jni---图像灰度化处理
- 信息收集(二)
- js定时器
- WIN10访问虚拟机的tomcat,访问不了的问题解决