C++之浅谈类与对象<一>

类与对象是C++语言的一个特点,类是对象的抽象,对象是类的实例。

类是抽象的需要占用内存,而对象时实例化的占用内存。

下面举个例子:

class Time  //定义类
{
	int hour;   //定义数据成员
	int min;    //定义数据成员
	int sec;    //定义数据成员
};
Time t;

看着这个结构是不是有点眼熟呢,跟C语言中学过的struct的应用很类似,但是两者之间还是有区别的:在struct中若没有特别声明,结构体的成员都是public公有成员;而class默认是private私有成员。

类中出了数据成员之外一般还有它的成员函数,说到成员函数我们最先想到的是构造函数,构造函数的存在就是为了让我们初始化对象(当然也可以cout<<一些语句,方便我们调试)。

说到初始化,之前在C语言中我们见过的初始化是这样的:

int i = 0;

但是如果在C++里这样初始化对象,那就是万万不行的啦

class Time
{
	hour = 0;   //错误的初始化
	min = 0;     //错误的初始化
	sec = 0;     //错误的初始化
};

所以一定要运用我们刚才提到的构造函数。

构造函数的函数名与类名相同,这是必须的,必须的,必须的(重要的事情说三遍),它没有返回值,也没有任何类型,它的功能是用户自己定义的,但是却不能被用户调用,如果用户自己没有定义构造函数,那么编译器会自动生成一个构造函数,但生成的这个构造函数并没有实际的作用,它的函数体是空的。

class Time  //定义类
{
public:
	Time()   //定义构造函数,函数名与类名相同
	{
		hour = 0;   //利用构造函数来对数据成员进行初始化
		min = 0;    //利用构造函数来对数据成员进行初始化
		sec = 0;    //利用构造函数来对数据成员进行初始化
	}

	void Set_Time(void);  //函数声明
	void Show_Time(void); // 函数声明

private:
	int hour;   //定义数据成员
	int min;    //定义数据成员
	int sec;    //定义数据成员
};
void Time:: Set_Time(void)  //定义成员函数的定义,设置时间
{
	cin >> hour;
	cin >> min;
	cin >> sec;
}
void Time::Show_Time(void)// 成员函数的定义,显示时间
{
	cout << hour << ":" << min << ":" << sec << endl;
}
Time t;     //定义类的对象

构造函数的定义除了上述例子中的那样无参的构造函数之外,还有带有参数的构造函数,它的一般格式为:

构造函数名(类型名1,形参1,类型2,形参2 ...)

上面的例子可改写为

Time(int, int, int); //有参数的构造函数
//在类外定义构造函数
Time::Time(int h, int m, int s)
{
	hour = h;
	min = m;
	sec = s;
}

C++还提供了另外一种初始化数据的方法,那就是参数化表,上面例子的初始化也可以写成这样:

Time::Time(int h, int m, int s)
     :hour(h)
     , min  (m)
     , sec (s)
    {}

与构造函数相对应的就是析构函数了,析构函数的作用是在撤销对象占用的内存之前完成一些清理工作,但并不是删除对象。它的用法是在类名前面加一个取反符号“~”,函数中的内容可为空。

上面例子的析构函数可写为

	~Time()
	{
		cout << "~Time()" << endl;
	}

一个类可以有多个构造函数,但是只能有一个析构函数。

调用构造函数和析构函数的顺序相当于一个栈,先构造的后析构,后构造的先析构。

时间: 2024-07-31 05:42:58

C++之浅谈类与对象<一>的相关文章

浅谈类与对象

1.抽象:是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 数据抽象:某类对象的属性或状态 行为抽象:某类对象的共同行为或功能特征(方法) 2.封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体.也就是将数据和操作数据的函数代码进行有机的结合,形成类. 3.继承 4.多态 1.带默认形参值的成员函数 类成员函数的默认值,一定要写在类定义中,而不能写在类定义之外的函数中. Class clock{ Public: Void setTime(int newH=0

浅谈Java回收对象的标记和对象的二次标记过程_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 一.对象的标记 1.什么是标记?怎么标记? 第一个问题相信大家都知道,标记就是对一些已死的对象打上记号,方便垃圾收集器的清理. 至于怎么标记,一般有两种方法:引用计数和可达性分析. 引用计数实现起来比较简单,就是给对象添加一个引用计数器,每当有一个地方引用它时就加1,引用失效时就减1,当计数器为0的时候就标记为可回收.这种判断效率很高,但是很多主流的虚拟机并没有采用这种方法,主要是因为它很难解决几个对象之间循环引用的

浅谈类的组合

4. 类的组合 4.1 定义 类中的成员数据是另一个类的对象 4.2 类组合的构造函数设计原则 不仅要负责对本类中基本类型成员数据初始化,也要对对象成员初始化. 4.3 声明形式 类名::类名(对象成员所需的形参,本类成员形参):对象1(参数),对象2(参数),....... {  // 函数体其他语句 } 4.4 例子:类的组合,线段类. #include<iostream> #include<cmath> Using namespace std; Class Point{ Pu

浅谈类的几个基础构造函数

通过例子来介绍下C++类的几个基础构造函数. 我们以一个C类型的字符串为例: class myString { public: myString(const char* rhs = 0); // 默认(含参)构造函数 myString(const myString& rhs); // 拷贝构造函数 myString(myString&& rhs) noexcept; // 移动构造函数 myString& operator=(const myString& rhs)

浅谈python 字典对象的 Pythonic 用法

字典对象在Python中作为最常用的数据结构之一,和数字.字符串.列表.元组并列为5大基本数据结构,字典中的元素通过键来存取,而非像列表一样通过偏移存取.笔者总结了字典的一些常用Pyhonic用法,这是字典的Pythonic用法的上篇 0. 使用 in/not in 检查 key 是否存在于字典 判断某个 key 是否存在于字典中时,一般初学者想到的方法是,先以列表的形式把字典所有键返回,再判断该key是否存在于键列表中: 更具Pythonic的用法是使用in关键字来判断 key 是否 存在于字

ext 浅谈类的实例

 打开ext的API,如下 找到Class这个选项 将鼠标移到config那里可以看到有以下属性:  好了,让我们开始进入主题:     首先,来讲讲如何自定义一个类,在ext中,创建一个类其实与其他语言差不多,只是表达的方式不一样而已,下面是定义一个类的方法 <!--*********************************************-->        <!--类的创建-->    Ext.define('Father', {        name: '

浅谈jQuery的对象构成1

前段时间在阅读javaScript基于原型的面向对象编程相关资料时,对一直在使用的jQuery产生了点疑问,便对其稍作了点研究. 在javascript编程中,生成对象的方式有两种, 第一种,对象字面量方式: var foo = { name : "紅一葉", age : 18 }; 第二种就是通过构造器方式创建对象: function Foo(){ this.name = "紅一葉"; this.age = 18; } var foo = new Foo(); 在

再谈类和对象

类和对象是Java中的常见概念,类具有四个特点: 对象性,封装性,继承性,多态性. 我学到了同一个类的不同对象是独立的,也学了 this 关键字的用法,还有static 的用法,也练习了 课堂上的程序,最后还学到了构造函数,以及类的 运行图. 也学到了作用域的概念,内部的作用域可以访问外部 的作用域,外部的不能访问内部的同名变量,今天 课堂上的例子代码量加大了一些,很多东西要好好 吸收和多看几次! 原文地址:https://www.cnblogs.com/sjnnjs/p/10742523.ht

《浅谈JavaScript系列》系列技术文章整理收藏

<浅谈JavaScript系列>系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对象编程 5浅谈javascript的数据类型检测 6浅谈Javascript嵌套函数及闭包 7根据一段代码浅谈Javascript闭包 8浅谈JavaScript编程语言的编码规范 9浅谈Javascript面向对象编程 10浅谈JavaScript