初探C++Primer(15.面向对象程序设计)

最近在恶补OOP相关知识,很遗憾学校的课没选上,于是只能上网购进C++Primer一本,开始重学C++之旅。。。

(壮哉我大ZJU,网购半天到货XDD)

学习路线

7.类->13.类设计者的工具->15.面向对象程序设计

总的来说,C++Primer的章节编排顺序是很合理的。有些教材习惯上来就讲虚函数,继承,恰恰缺乏对有关问题的引导,造成学完后半懂不懂的情况。

7.类

类的特性,成员函数,友元函数,构造函数简介

13.类设计者的工具

拷贝构造函数,拷贝赋值运算符,析构函数,内存管理类,合成拷贝控制的时机,三/五法则,使用默认/删除函数,移动构造函数,移动赋值运算符,右值引用,智能指针shared_ptr<>

[以上两章均未涉及继承]

15.面向对象程序设计

#include <iostream>
#include <vector>
#define DEBUG stdio
#include "debug/debug.h"
using namespace debug;
using namespace std;
class A
{
public:
	A(): tag(count++) { println("A%d()", tag); }
	A(const A& a): tag(count++) { println("A%d(const A%d&)", tag, a.tag); }
	A(A&& a): tag(count++) { println("A%d(A%d&&)", tag, a.tag); }
	A& operator = (const A& a) { println("A%d& operator = (const A%d&)", tag, a.tag); }
	A& operator = (A&& a) { println("A%d& operator = (A%d&&)", tag, a.tag); }
	~A() { println("~A%d()", tag); }
public:
	void func() { println("A::func()"); }
	void func(int) { println("A::func(int)"); }

	virtual void f() { println("A::f()"); }
	virtual void g() { println("A::g()"); }
	virtual void h() { println("A::h()"); }
private:
	static int count;
	const int tag;
};

int A::count = 0;

class B: public A
{
public:
	B() = default;
	B(const B&) = default;
public:
	void func() { println("B::func()"); }

	void f() override { println("B::f()"); }
	virtual void h() { println("B::h()"); }
};

int main()
{
	A a;
	B b;
	A *p = &b;
	p->f();	// virtual
	p->g();	// virtual
	p->h();	// virtual
	p->func(1);
	p->func();
}
A0()
A1()
B::f()
A::g()
B::h()
A::func(int)
A::func()
~A1()
~A0()
时间: 2024-12-21 03:03:07

初探C++Primer(15.面向对象程序设计)的相关文章

C++ Primer学习总结 第15章 面向对象程序设计

第15章 面向对象程序设计 1.    构造基类和派生类. 其中A类是基类,B类是派生类.派生类的构造函数必须重新写过,不能继承.(因为毕竟两个类的类名都不一样,不可能构造函数继承)只继承其他的成员函数和成员变量. 派生类可以覆盖基类的虚函数,但是也可以选择不覆盖(即直接使用父类的函数版本)比例A类的print_1()虚函数就没有被覆盖. 基类的静态成员:如果基类有一个静态成员,那么基类和所有派生类都共同拥有这仅有的一个静态成员. 2.    基类的虚函数默认实参最好与派生类的虚函数默认实参一致

《C++primer(第五版)》学习之路-第十五章:面向对象程序设计

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 15.1 OOP:概述 1.面向对象程序设计的核心思想是数据抽象,继承和动态绑定.通过使用数据抽象,我们可以将类的接口与实现分离:使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型类型的区别,而以统一的方式使用它们的对象. 2.通过继承联系在一起的类构成一种层次关系.通常在层次关系的根部有一个基类,其他类则直接或间接地从基类继承而来,这些继承得到的类称

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种.NET中特别重要的缓布技术Cache.利用Cache提升程序性能. 1. 缓存Cache的命名空间 .NET中对缓存有两个命名空间 命名空间1:System.Web.Caching 命名空间2:System.Runtime.Caching 引用范围:这两个命名空间,都可以在Web和非WEB应用程序中

C++ Primer笔记14_面向对象程序设计

OOP概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 1.继承: 类的一种层次关系,通常在层次关系的根部有一个基类,其他类则直接或间接的继承基类而来.这些继承而来的类称为派生类. 基类希望它的派生类自定义适合自身的版本的函数,基类就将函数声明为虚函数,加上virtual关键字. 2.动态绑定: 通过动态绑定,可以使用同一段代码处理基类和子类对象. 在C++中,当我们使用基类的引用或指针调用一个虚函数时会发生动态绑定.有虚函数

Java面向对象程序设计第14章3-8和第15章6

Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class test { static String loadStream(InputStream in) throws IOException { StringBuffer buffer = new StringBuffer(); int count= 1,i=6; byte[] buf = new byte[co

面向对象程序设计

一.实验目的 (1)要求学生能够熟练掌握C++语言的基本知识和技能. (2)基本掌握面向对象程序设计的基本思路和方法.  (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题设计 二.实验要求 (1)  以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息.汽车牌照号码及到达或离去的时刻 (3)对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置:若是

Java实验二实验报告:java面向对象程序设计

java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问

20135234马启扬 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:马启扬  学号:20135234 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--22:50 仪器组次:34         必修/选修: 选修            实验序号:02 实验名称:实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和T

Java面向对象程序设计

北京电子科技学院(BESTI)                                                                                 实     验    报     告 课程:Java        班级:1352        姓名:马悦      学号:20135235 成绩:              指导教师:娄嘉鹏              实验日期:2015.05.07 实验密级:            预习程度: