C++
王贞
这个作者很懒,什么都没留下…
展开
-
15. 继承
代码重用: 组合、继承组合:拿已有的对象拼接出新的对象. (实的)继承: 拿已有的类进行改造,得到新的类.(虚的)Person: 父类 Student: 子类传统做法:老类放在上面,新的类放在下面.原创 2017-12-15 19:36:28 · 117 阅读 · 0 评论 -
16. 子类父类关系
class Employee{ public: Employee(const std::string& name, const std::string& ssn); const std::string& get_name() const; void print(std::ostream& out) const; void print(std::ostream&原创 2017-12-15 21:39:12 · 180 阅读 · 0 评论 -
17. 函数重载和默认参数
函数重载: 函数名相同,但函数参数类型不同个数不同. 编译器选择不同的函数. 但若返回类型不同,参数相同,编译器无法区分,就不是函数重载.Default arguments: 预先给参数里写一个值. eg: Stash(int size, int initQuantity = 0);// 函数原型里int harpo(int n, int m = 4, int j = 5);int c原创 2017-12-15 21:59:25 · 255 阅读 · 0 评论 -
18. 内联函数
调用函数,需要有额外开销的.int f(int i){ return i*2;}main(){ int a = 2; int b = f(a); return 0;}汇编语言:_f_int: add ax,@sp[-8],@sp[-8] ret_main: add sp,#8 //sp寄存器(堆栈指针) #8立即数 程序运行过程中,每个程序有独立的堆栈原创 2017-12-16 09:53:13 · 184 阅读 · 0 评论 -
19. const
const: 初始化以后不能被赋值再修改.const int x = 123;x = 27; //wrongx++; //wrongint y = x; //okconst int z = x; //okconst对C++来说,仍然是变量而不是常数. 变量在内存中会分配地址. 常数编译器在编译过程中记载它的自己内存表里的一个值.const int bufsize = 1024; //b原创 2017-12-16 18:21:12 · 126 阅读 · 0 评论 -
20. 不可修改的对象
建议: 传对象,需要花费堆栈。 传地址,担心别人修改指针多指向的内容. 1. 传参数 void f(const int *x); 2. const Currency the_raise(42,38); //对象Currency里面的值是不能被修改的. 这样肯定是不行的,建议成员函数加const 相当于this 是constclass Data {}int Data::get_day()原创 2017-12-16 18:22:26 · 157 阅读 · 0 评论 -
21. 引用
C++复杂的原因:提供了太多的内存模型.太多可以放对象的地方(堆、堆栈、全局数据区里面)提供了太多访问对象的方式 (变量里面放对象,通过指针访问一个对象,通过引用去访问一个对象)以上有九种组合.char c; char* p = &c; char& r = c; //引用 初始化 //引用:一般的时候需要定义的时候给这个初始化. r是c的引用(别名). 初始值必须是一个变量或可以做左原创 2017-12-16 21:47:32 · 159 阅读 · 0 评论 -
24. 多态的实现(虚函数)
任何一个类,如果有虚函数, 这个类的对象比正常的就会大一点.#include <iostream>using namespace std;class A{ public: int i; A():i(10) {} virtual void f() { cout << "A::f()" << i << endl; }};int main(){ A a;原创 2017-12-21 20:56:54 · 132 阅读 · 0 评论 -
28. 静态对象
C语言: 全局变量、本地变量 static: 持久存储(在哪里) 访问受局限(谁能看到你)static本地变量就是全局变量全局变量static: 只在这个.c文件里有效 本地变量static: 这个本地变量具有持久存储, 无论是否离开,本地变量都是保存着这个值的.(其实static本地变量就是全局变量) 函数static: 这个函数只能在.c文件里被访问,.c原创 2018-01-09 20:18:34 · 143 阅读 · 0 评论 -
25. 引用再研究
//类的成员变量若是引用,必须这么写.class X{ public: int& m_y; X(int& a);};X::X(int& a):m_y(a) {}//函数返回一个引用,不能返回一个本地变量//eg:这个程序返回的是全局变量#include <assert.h>const int SIZE = 32;double myarray[SIZE];doub原创 2018-01-02 19:58:09 · 117 阅读 · 0 评论 -
26.拷贝构造I
//: C11: HowMany.cpp#include <iostream>#include <string>using namespace std;static int objectCount = 0;class HowMany{ public: HowMany() { objectCount++; print("HowMany()"); } void print(c原创 2018-01-03 19:29:12 · 119 阅读 · 0 评论 -
27.拷贝构造-II
class Person { public: Person(const char *s); ~Person(); void print(); private: char *name; }; //没有写自己的拷贝构造函数 //编译器自己给的拷贝构造,新的对象指针和老的对象指针是相同的.#ifndef _PERSO原创 2018-01-04 21:26:45 · 125 阅读 · 0 评论 -
30.运算符重载---基本规则
运算符: + - * / * % & | = += -= *= /= %= ^= &= |= ……… 运算符重载:把运算符的运算,把你写的一个函数去表达出来。故要为写的重载符 operat原创 2018-01-15 20:03:36 · 144 阅读 · 0 评论 -
14. 对象组合
OOP特性:封装、继承和多态性. 继承:代码的重用. 代码重用:继承/组合组合: 用已有的对象组合出新的对象. eg: 有了engine对象,有了tyre对象,则可以组合成car对象. 用对象制造对象. class Person {...};class Currency {...};class SavingsAccount{ public: Savin原创 2017-12-14 21:42:04 · 136 阅读 · 0 评论 -
13. 初始化列表
初始化方式class A{ private: int *p; public: A():p(0);//第一种初始化方法:初始化列表 };class Point{ private: const float x, y; Point(float xa = 0.0, float ya = 0.0):x(xa),y(ya){}//初始化列表原创 2017-12-14 20:39:19 · 108 阅读 · 0 评论 -
12. 访问限制public/private/protected
public: 任何人都可以访问private: 类的成员函数可以访问这些成员变量或成员函数protected: 类自己和子子孙孙可以访问friends: 声明别人是你的朋友,别人就可以访问自己的private东西#include "stdafx.h"#include <iostream>using namespace std;class A{private: int i;原创 2017-12-14 20:20:29 · 132 阅读 · 0 评论 -
2. 什么是对象
对象变量与对象 所有的变量都是对象. int i,j; i,j都是对象.数据+服务 对象 = 数据 + 服务原创 2017-12-08 19:05:36 · 209 阅读 · 0 评论 -
3. 面向对象基本原理
面向对象基本原理1. 对象交互的形式是消息(函数) 通过对象来操作函数,改变状态(data) 改变消息(返回值)2. Object vs Class Object: 东西(实体)-------对象 Class: 东西的种类(概念)----类 eg: 杯子(类) 这只杯子(对象)3. OOP的5条原则(1). 一切都是对象 (2).原创 2017-12-08 21:10:21 · 1976 阅读 · 0 评论 -
1.第一个C++程序
第一个C++程序 #include <iostream> using namespace std; //std名字空间 int main() { //cout:标准输出 // cout << 把后面的东西塞到cout中 // endl 换行 cout << "Hello,World! I am " << 18 << "Today!"原创 2017-12-08 20:25:31 · 219 阅读 · 0 评论 -
5. 头文件
.h : 书写声明 .cpp: 书写定义声明与定义声明: extern 变量 extern int value; //声明 函数原型 fun(); 类只有声明 struct只有声明 定义: int value; //定义 函数定义; fun() {}.h只放声明:避免多原创 2017-12-11 22:20:46 · 147 阅读 · 0 评论 -
4. 自动售票机例子
C++书写规范每一个类需要有.h和.cpp文件. //TicketMachine.h (声明)/* * TicketMachine.h * Created on: 2017/12/11 * Author: WangZhen*/#ifndef TICKETMACHINE_H_#define TICKETMACHINE_H_class TicketMachine{ public:原创 2017-12-11 20:47:03 · 1302 阅读 · 0 评论 -
6. 时钟的例子
class ClockDisplay{ NumberDisplay hours; NumberDisplay minutes;}class NumberDisplay{ int limit; int value;}需要5个源代程序文件, 2个.h, 2个.cpp激励自己, 写博客不要偷懒:原创 2017-12-12 19:54:33 · 213 阅读 · 0 评论 -
7. 成员变量
本地变量函数内部定义的. 作用域:进函数之前不存在,离开函数后也不存在,在函数内 部有效. int TicketMachine::refundBalance() { int amountToRefund; //本地变量 amountToRefund; //成员变量 balance = 0; //成员变量 return amountTo原创 2017-12-12 20:17:02 · 121 阅读 · 0 评论 -
22. 向上造型
B 父类 D 子类一个D的对象,可以交给B的变量. 一个D的指针,可以交给B的指针. 一个D的reference, 可以交给B的reference.如果B是A的子类,那么B的对象可以被当做A的对象来看待/使用.#include using namespace std;class A{ public: int i; public: A():i(10) {原创 2017-12-19 22:15:29 · 187 阅读 · 0 评论 -
8. 成员变量的秘密
作用域Fields: 类的成员变量 parameters: 函数的参数 local variables: 本地变量parameters + local variables:本地存储:进入函数之前不存在 离开函数之后不存在 放在堆栈的地方,放在具体的位置不同.原创 2017-12-12 21:24:42 · 155 阅读 · 0 评论 -
9. 构造和析构
class Point { public: void init(int x, int y); void print() const; void move(int dx, int dy); private: int x; int y; }; Point a; //内存找了一个地方,放Point的对象原创 2017-12-13 20:16:48 · 100 阅读 · 0 评论 -
10. 对象初始化
存储编译器会在{}开始出现的所有变量的空间. 构造器的调用只在创建对象时发生.class X{ public: X(); //构造函数};X::X() //构造函数{}void f(int i){ if(i<10) { goto jump1; //如果运行这行,x1的构造就没有做, f结束的时候x1是需要析构的。一个对象没有构造,所以没有办法析构.原创 2017-12-13 20:56:33 · 131 阅读 · 0 评论 -
11. new & delete
new / deletenew int; new Stash; //new一个类, 分配空间之后,调用构造函数. new int[10];delete p; //先调用析构函数,再释放空间 delete[] p; //new带着[],则delete也带着[].eg: int* psome = new int[10]; new 10个int空间,交给psome指针. delete原创 2017-12-13 22:21:11 · 115 阅读 · 0 评论 -
23. 多态性(虚函数)
画三种图:Circle(圆形)、 Rectangle(矩形)、 Ellipse(椭圆形) 共同的操作:render、move、resize 共同的数据:center shape是父类, Rectangle是shape的子类, Square是Rectangle的子类 Ellipse是shape的子类, Circle是Ellipse的子类. 每个子类的render()和shape的ren原创 2017-12-21 20:04:43 · 161 阅读 · 0 评论 -
31. 运算符重载---原型(未完成)
运算符重载—原型 if it is read-only pass it in as a const reference(except built-ins) make member functions const that don’t change the calss(boolean operators,+,-,etc) for global functions, if the left-ha...原创 2018-01-25 20:13:36 · 231 阅读 · 0 评论