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.id
s.name
s.display()
三.如何使用类与对象
1.构造函数
首先,构造函数就是与类同名的函数(是系统内置的,意思就是就算你不定义,系统也会自带一个构造函数)。
其次,构造函数是可以重载的,所谓重载就是认为地改变形参。
记住,构造函数是用来对数据成员赋值的。
class Student
{
private:
int id;
string name;
public:
Student()
{
id=0;
name=" ";
}
Student(int a,string b)
{
this->id = a;
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
id=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)