C++类与对象

C++面向对象

一.面向对象程序设计方法概述

1.凡是以类对象为基本构成单位的程序称为基于对象的程序
2.面向对象面向过程的区别:
在笔者看来,通俗地讲,“面向对象”就是在描述一个对象,“面向过程”则是在描述一个过程
在程序设计方面,“面向过程”的特点是以过程为主,分析问题时,着眼于解决问题的步骤,并通过代码实现这些步骤。值得注意的是,面向过程不会对问题进行抽象总结,也就是说当我们面对一个问题时,“面向过程”思想会驱使我们用某一种方法去实现,一千个问题就会有一千种具体实现
而“面向对象”的特点是以对象为基础,解决问题时会对问题进行抽象总结,这是“面向对象”最核心的特点。这避免了代码重复

3.面向对象程序设计有四个主要特点
抽象 封装 继承 多态性
抽象:一个类即是类中所有对象的抽象体,类包含了所有对象的共同属性(特点)行为(方法)
封装:有选择性地限制外界访问类/对象中的属性与方法。
继承:子类(子对象)可继承父类(父对象)的的属性和方法,而子类可在父类的基础上增加特有的属性和方法。“继承”这一特性避免了代码重复
多态性:不同类的对象对同一消息做出反应。
那么四个特点分别有什么作用呢?
总的来说, 抽象是对类的概括,封装则是对的类的包装,继承减少代码重复,多态性则有助于代码的扩展延申

二.理解类与对象

1.类与对象的关系
类是对象的抽象总结,而对象是类的具体实例。
类是对象的模板,类似于结构体类型是结构体变量的模板,C++中我们要先声明一个结构体类型,然后用它去定义结构体变量;同样地,C++中我们要先声明一个类类型,然后用它去定义若干个对象
内存上,类是抽象的,因而类不占用内存,而对象是具体的,因而对象占用存储空间

2.类的声明
class 类名
{
private:
私有的数据和成员函数
public:
公有的数据和成员函数
}

3.对象的定义
两种方法
一是先声明类类型,再定义对象
二是在声明类的同时定义对象
(这里不作具体讲述)

4.访问对象成员
(注意:类外只能访问public成员,除非是调用函数)
三种访问方法
法1:对象名.成员名

//定义一个学生类
class Student
{
	public:
		int id;
		string name;
		viod display()
		{
			cout<<"I'm a student.";
		}
};
//定义一个学生对象
Student stu1;
//通过对象调用公有数据成员
stu1.name
stu1.id
//通过对象调用公有函数成员
stu1.display()
	

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

Student *p;
p->name
p->id
p->display
//或者
(*p).name
(*p).id
(*p).display

法3:通过对象的引用来访问对象中的成员

Student stu1;
Student &s=stu1;//s相当于是stu1的别名
s.id
s.name
s.display()

三.如何使用类与对象

1.构造函数
首先,构造函数就是与类同名的函数(是系统内置的,意思就是就算你不定义,系统也会自带一个构造函数)。
其次,构造函数是可以重载的,所谓重载就是认为地改变形参。
记住,构造函数是用来对数据成员赋值的。

class Student 
{
	private:
		int id;
		string name;
	public:
		Student()//这就是人为定义Student类的构造函数
		{
			id=0;
			name=" ";
		}
		Student(int a,string b)
		{
			this->id = a;//其实this可以不写,系统自带
			this->name = b;
		}
		Student(int a,string b):id(a),name(b){}
		//重载构造函数,同上,只是形式不同
}

2.析构函数
首先它的写法是:~类名()
其次,C++中“~”是位取反运算符,由此可知,析构函数是与构造函数作用相反的函数。当对象生命期结束时,会自动执行析构函数,设立构造函数最初的目的是为了释放对象占用的空间,但除此之外,它也可以用来执行“用户希望再最后一次使用对象之后所执行的任何操作”

class Student 
{
	 private:
	  	int id;
	  	string name;
	 public:
		  Student()//构造函数
  		~Student()//自行定义的析构函数
		  //但记住析构函数不能重载也就是不能自行加形参
		  {
		  	cout<<"I'm a student.";
		  }
  };

3.调用构造函数和析构函数的顺序
二者调用顺序相反
一般而言,最先被调用构造函数的对象的析构函数将最后被调用。

#include <bits/stdc++.h>
class Student
{
	private:
		int id;
		string name;
	public:
		Student(int a,string b);
		{
			id=a;
			name=b;
		}
		~Student()
		{
			cout<<"id="<<this->id<<endl;
		}
}stu1,stu2;
int main()
{
	Student stu1(1,A);
	Student stu2(2,B);
	return 0;
}
//系统最后会输出
id=2//stu2的析构函数
id=1//stu1的析构函数




		
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值