面向对象编程考前抱佛脚
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程考前抱佛脚相关的知识,希望对你有一定的参考价值。
多继承,虚基类,模板编程不考。考试范围10-15章。
第10章:类和对象
10.1 类和对象的定义
类是一种类型,该类型的变量成为对象。
一个类的定义:
private可缺省。类定义后的大括号要有分号;
class Person
{
private:
string name;
int age;
public:
Person(string a,int b)
{
name=a;
age=b;
}
string GetName()
{
return name;
}
int GetAge()
{
return age;
}
};
关于类内外访问权限:类内都可访问,类外只有public的可访问。
若想在类内声明,类外定义:
格式是:
返回类型 类::函数名(参数列表)
class Person
{
private:
string name;
int age;
public:
Person(string a,int b)
{
name=a;
age=b;
}
string GetName();
int GetAge();
};
string Person::GetName()
{
return name;
}
int Person::GetAge()
{
return age;
}
关于对象的存储空间:
定义对象后,对象数据成员占用不同的存储空间;该类的所有对象的同一成员函数共享同一代码空间。
定义类和对象的相关说明:
1、类中数据成员的类型:自身类的对象不能做数据成员。
2、类的使用在前,定义在后,则需要声明。如:
class B;
3、定义对象有三种方法:
定义完成后定义对象;(常用)
定义类的同时定义对象:(如代码有三个对象了)
class A
{
...
}a1,a2,a3;
定义无类名对象(只能定义一次,没啥用)
class
{
...
}a1,a2,a3;
4、结构体与类的区别:
结构体缺省是public;类中缺省是private;
结构体是类的特例。
10.2 初始化对象,撤销对象
对类公有成员的初始化:
可以直接这样。
Person p={"aaa",12};
构造函数
调用时机:产生新对象时自动调用。
//类内定义:
类名(参数列表)
{...}
//类外定义
类名::类名(参数列表)
{...}
//eg:
//类内:
Person(string a,int b){name=a;age=b;}
//类外:
Person::Person(string a,int b){name=a;age=b;}
构造函数特点:
1、构造函数是成员函数,可在类内/外。
2、构造函数:函数名与类名相同,无返回值。
3、构造函数可重载。
4、一般是public的。
5、创建对象时系统自动调用函数。
析构函数
撤销对象时,自动调用。
//类内:
~ClassName(){...}
//类外:
ClassName::~ClassName(){...}
析构函数特点
1、是成员函数,可在类内/外 定义
2、一般是public
3、是特殊函数,函数的名字是在类名前加~;无返回值,无参数
4、不可重载。
5、可被显式调用,也可被系统自动调用,其中:
对象是系统自动创建的,在对象作用域结束时系统自动调用析构函数。
对象是new创建的,在使用delete释放对象时,delete会自动调用析构函数。
会自动调用析构函数。
缺省构造函数
定义类时若没定义构造函数,则系统自动生成缺省构造函数,此构造函数不进行任何操作。
缺省构造函数有两种形式:没有参数/有缺省值。缺省构造函数只能有一个。否则会矛盾。
如下,编译系统不知道调用哪个。
Date::Date()
{year=2021;month=6;day=16;}
//
Date::Date(int y=2017,int m=6;int d=16)
{year=y;month=m;day=d;}
若已经定义了构造函数,系统不会自动生成缺省构造函数。
缺省析构函数
要注意的就是:若类中有动态申请的数据空间就要自己定义析构函数(delete)。
p41
以上是关于面向对象编程考前抱佛脚的主要内容,如果未能解决你的问题,请参考以下文章