首页 > 代码库 > 初探C++Primer(15.面向对象程序设计)
初探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()
初探C++Primer(15.面向对象程序设计)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。