C++程序设计 | 第四章类与对象

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43145926/article/details/96716072

面向对象程序设计的基本特点

  • 抽象:对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
  • 封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机整体,也就是将数据与操作数据的函数代码进行有机的结合,形成“类”
  • 继承:允许在原有类特性的基础上,进行更具体、更详细的说明。
  • 多态:指一段程序能够处理多种类型对象的能力。在C++中这种多态性可以通过强制多态,重载多态,类型参数化多态,包含多态4种形式实现。
  • 作用域public,private,protected,以及不写时的区别
    答:不写时默认为default
    在这里插入图片描述
  • 内联成员函数
    隐式声明:
class Clock {
public:
	void show(){xxxxxxxxx}
private:
	int hour,minute;
};

显示声明:

class Clock {
public:
	void show();
private:
	int hour,minute;
};
inline void Clock::show(){
xxxxxxxxx;
}

构造函数

  • 构造函数的函数名与类名相同,没有返回值,通常被声明为public

  • 构造函数在对象被创建时自动调用
    复制构造函数

  • 其形参是本类的对象的引用。其作用是使用一个已经存在的对象去初始化同类的一个新对象。

class Point{
public:
	Point(int xx=0,int yy=0){//构造函数
	x=xx;
	y=yy;
}
	Point(Point &p);//复制构造函数
	int getx(){return x};
	int gety(){return y};
private:
	int x,y;
};
Point::Point(Point &p)
{
	x=p.x;
	y=p.y;
}

构造函数是在对象创建时被调用,而复制构造函数在以下3个情况被调用

  • 当用类的一个对象去初始化该类的另一个对象时
int main()
{
	Point a(1,2);
	Point b(a);//初始化b.c时复制构造函数被调用
	Point c=a;
}
  • 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。
void f(Point p)
{xxx;}
int main()
{
	Point a(1,2);
	f(a);//函数的形参为类的对象,调用函数时,复制构造函数被调用
	return 0;
}
  • 如果函数的返回值是类的对象,函数执行完成返回调用者时
Point g()
{
	Point a(1,2);
	return a; //返回值是对象,调用复制构造函数
}

析构函数

  • 用来完成对象被删除前的一些清理工作
  • 析构函数是在对象的生存期即将结束的时刻被自动调用的。
  • 析构函数不接收任何参数

调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的次序。注意,内嵌对象在构造函数的初始化列表中出现的顺序与内嵌对象构造函数的调用顺序无关

前向引用声明

class Fred;//前向引用声明
class Bar
{
	Fred x;//错误,类Fred的定义尚不完整
};
class Fred
{
	Bar y;
};

UML图形标识统一建模语言
参考这篇blog:https://blog.csdn.net/qq_27175513/article/details/79744694

结构体

  • 结构体和类唯一的区别在于,结构体和类具有不同默认访问控制属性:在类中,对于未指定访问控制属性的成员,其属性为私有,而结构体中为公有。
  • 如果结构体全是公有成员,没有用户定义的构造函数,没用基类和虚函数,则可以用这种方式赋值:
    struct Student {}; int main() { Student stu={97001,"lll",'F',19}; }

联合体

  • 默认访问控制属性为公有
  • 联合体的全部数据成员共享同一组内存单元
  • 联合体变量中的成员同时至多只有一个是有意义的
  • 联合体的成员对象不能有自定义的构造函数、析构函数和重载的复制赋值运算符
  • 联合体不能继承,因而也不支持包含多态。
union Mark
{
	char grade;//等级制的成绩
	bool pass; //只记是否通过的成绩
	int percent;// 百分制成绩
};

猜你喜欢

转载自blog.csdn.net/qq_43145926/article/details/96716072