huangfu Blog
Love Leanote!
Toggle navigation
huangfu Blog
主页
About Me
归档
标签
09string/迭代器iterator/面向对象编程三大特征/继承
2017-02-16 20:47:48
158
0
0
tarena
#string类型的使用 ##构造函数 string() string(const char* str) ##拷贝构造函数 string(const string* s) ##析构函数 ~string() ##重载的运算符 operator == operator != operator = operator > operator < operator [] operator + operator += operator << operator >> ... ... ##成员函数 append() // 追加 size() at() c_str() // 变成const char *的字符串(常用) ... ... #include <iostream> #include <string> using namespace std; int main() { string stra("hello"); // 构造函数 string strb = "hello"; // 单参构造机制 strb = "world"; // =运算符重载 if(stra == strb){} // ==运算符重载 cout << stra << endl; // <<运算符重载 stra += "test"; // +=运算符重载 cout << stra[3] << endl; // []运算符重载 cout << stra.at(3) << endl; // 下标取值成员函数的调用 strb.append("test"); // 追加成员函数的调用 /* 开发最常用,C++str to Cstr*/ const char* cstr = stra.c_str(); // 转换成员函数的调用 } #迭代器 ---- list 迭代器类型暂时可以认为它是一个指针 > `list<int> datas;` // 列表 成员函数 datas.push_back(); // 增加一个数据 datas.begin(); //返回第一个元素对应的迭代器 datas.end(); // 返回最后一个元素后面位置的迭代器,用于标记 datas.front(); //返回第一个元素的引用 datas.back(); //返回最后一个元素的引用 #include <iostream> #include <list> using namespace std; int main() { list<int> datas; datas.push_back(9); datas.push_back(5); datas.push_back(2); datas.push_back(7); datas.push_back(3); /* 链表迭代器*/ list<int>::iterator it = datas.begin(); /* 遍历链表*/ while(it != datas.end()) cout << *it++ << ' '; cout << endl; } #面向对象的三大特征 ##1. 封装 ###概念 隐藏具体的实现,然后提供公开的访问接口 ###封装的优点 * 降低开发难度,便于协同开发 * 防止不必要的扩展 ##2. 继承 ##3. 多肽 #继承 ##概念 继承就是一种传承,这里涉及到两个类 一个叫父类(基类),另一个叫子类(派生类) * 子类可以传承父类的所有数据 * 子类还可以对父类进行扩展 ##作用 1. 代码复用 2. 扩展 ##语法 class Parent { }; class Child:public Parent { // 扩展 }; /* 默认是private继承*/ class Child2:Parent { }; ##举例 #include <iostream> using namespace std; class Animal { public: string name; int age; void show() { cout << name << ':' << age << endl; } }; class Dog { public: string color; void fun() { cout << "看家" << endl; } }; int main() { Dog dog; dog.name = "旺财"; dog.age = 3; dog.color = "黑"; dog.show(); dog.fun(); } ##继承和组合 ###继承 继承关系是一个 is a 关系 Dog is a Animal Cat is a Animal Animal animal = dog; `在公开继承下任何子类对象,都可以看成父类型的对象 但不可以任何父类型的对象看成子类型的对象` ###组合 组合关系是一个 has a 关系 Car has a Radio Car 可以复用Radio 代码和数据 也可以扩展 ##C++中的继承方式 * 公开继承public * 保护继承protected * 私有继承private ##公开继承权限 父类的`公开`数据到子类之后是`公开`的 父类的`保护`数据到子类之后是`保护`的 *(保护数据在类内可以访问,在类外无法访问)* 父类的`私有`数据到子类之后是`隐藏`的 #include <iostream> using namespace std; class Parant { private: int x; void private_fun() { cout << "private_fun" << endl; } protected: void protected_fun() { cout << "protected_fun" << endl; } public: void piblic_fun() { cout << "public_fun" << endl; } /* 利用友元函数 提供访问私有数据的接口*/ firend void call_privatefun(Parent* p) { p->private_fun(); } }; /* 公开继承*/ class Child:public Parant { public: /* 访问保护数据的公开接口*/ void call_protectedfun() { protected_fun(); } }; int main() { Child c; /* 直接调用父类的公开数据*/ c.public_fun(); /* 在类外使用公开借口调用父类的保护数据*/ c.call_protectedfun(); /* sizeof结果为4 说明父类的私有数据到子类是隐藏的*/ cout << sizeof c << endl; /* 子类访问父类私有数据常用方法1 - 在父类增加保护接口让子类访问父类的私有数据*/ /* 子类访问父类私有数据常用方法2 - 在父类增加公开接口让子类访问父类的私有数据*/ /* 子类访问父类私有数据常用方法3 - 在父类增加友元函数访问*/ } ##私有继承下的权限 父类的`公开`数据到子类之后是`私有`的 父类的`保护`数据到子类之后是`私有`的 父类的`私有`数据到子类之后是`隐藏`的 ##保护继承下的权限 父类的`公开`数据到子类之后是`保护`的 父类的`保护`数据到子类之后是`保护`的 父类的`私有`数据到子类之后是`隐藏`的
上一篇:
11多继承/虚继承/虚函数/函数重写(覆盖)
下一篇:
08单目运算符重载/运算符重载的限制/特殊运算符重载
0
赞
158 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册