码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-01-06 01:12:16      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:继承   管理类   合成   函数   vector   cto   static   程序设计   debug   

最近在恶补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()

 

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

标签:继承   管理类   合成   函数   vector   cto   static   程序设计   debug   

原文地址:http://www.cnblogs.com/xlnx/p/6254595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!