C++ 扫盲学习
来源:互联网 发布:芝华仕沙发头等舱 知乎 编辑:程序博客网 时间:2024/05/01 03:36
1.继承:
C++ 的继承用冒号“:”,
如class A:public B
其中B前面的public是访问权限的一个标志,
共有三个最低权限级别:private protected public
class A:private B //从B中继承来的成员变量和方法的属性全部变成private
class A:protected B //从B中继承来的所有public方法的属性变成protected
class A:public B //从B中继承来的成员变量和方法保持原有属性
实现多重继承时,基类间用“,”号隔开
class CRectangle: public CPolygon, public COutput {
不能被继承的:1.构造函数和析构函数 2.纯虚拟函数 3.友善关系
虽然基类的构造函数和析构函数没有被继承,但是当一个子类的object被生成或销毁的时候,
其基类的默认构造函数 (即,没有任何参数的构造函数)和析构函数总是被自动调用的。
如果基类没有默认构造函数,或你希望当子类生成新的object时,基类的某个重载的构造函数被调用,
你需要在子类的每一个构造函数的定义中指定它:
derived_class_name (parameters) : base_class_name (parameters) {}
2.类中方法可以在类中声明,在类外定义,使用双冒号进行声明:
范围操作符 (::) 声明了被定义的成员所属的class名称,并赋予被定义成员适当的范围属性,这些范围属性与在class内部定义成员的属性是一样的。
例如,在下面的例子中,我们在函数set_values() 中引用了private变量x 和 y,这些变量只有在class内部和它的成员中才是可见的。
在class内部直接定义完整的函数,和只定义函数的原型而把具体实现放在class外部的唯一区别在于,在第一种情况中,
编译器(compiler) 会自动将函数作为inline 考虑,而在第二种情况下,函数只是一般的class成员函数:
#include <iostream.h> class CRectangle {int width, height; public:void set_values (int, int);int area (void) {return (width * height);}friend CRectangle duplicate (CRectangle); }; void CRectangle::set_values (int a, int b) {width = a;height = b; } CRectangle duplicate (CRectangle rectparam) {CRectangle rectres;rectres.width = rectparam.width*2;rectres.height = rectparam.height*2;return (rectres); } int main () {CRectangle rect, rectb;rect.set_values (2,3);rectb = duplicate (rect);cout << rectb.area(); }
3.友善类和友善函数:
在类中声明一个函数和一个类为友善的,可使友善函数和类访问类中的private和protected属性的成员变 量和方法。
友善类声明:friend class CRectangle;
友善函数声明:friend CRectangle duplicate (CRectangle);
4.抽象类和虚拟函数
虚拟函数:在函数的前面 加关键字virtual:
virtual int area (void) { return (0); }
纯虚拟函数:在函数名前面加关键字virtual,不用定义,直接后面加=0;
virtual int area (void) =0;
包含纯虚拟函数的为抽象类,不能直接实例化对象。
可以用指向基类的指针实现向上转型,指向基类的指针只能调用在基类中定义过的的函数,
可以在基类中加虚拟或纯虚拟函数,在子类中重写,用指向基类的指针调用方法,
可调用相应子类的重写的方法,实现多态特性。
5.模板
模板按其字面意思是定义好一个模子,参数为泛类型,不收参数类型的限制,如我定义一个函数,
传入int可以,传入long也可以,定义的时候有一定的格式要求,
函数模板:
template <class T> T GetMax (T a, T b) { return (a>b?a:b); } int main () { int i=5, j=6, k; long l=10, m=5, n; k=GetMax(i,j); n=GetMax(l,m); cout << k << endl; cout << n << endl; return 0; }
类模板:
template <class T> class pair { T value1, value2; public:pair (T first, T second) { value1=first; value2=second; } T getmax (); }; template <class T> T pair::getmax (){ T retval; retval = value1>value2? value1 : value2; return retval; } int main () { pair myobject (100, 75); cout << myobject.getmax(); return 0; }
当然也有模板的特殊化,即可指定特定的数据类型:
template <> class pair <int> {。。。}
6. 命名空间就是把全局范围分割成许多子域范围,一个子域范围用一个名字来表示:
#include <iostream.h>namespace first { int var = 5;}namespace second { double var = 3.1416;}int main () { cout << first::var << endl; cout << second::var << endl; return 0;}
上面的调用相应空间中的成员变量都使用范围操作符::,
当然还有另外一种的方式即using namespace:
#include <iostream.h>namespace first { int var = 5;}namespace second { double var = 3.1416;}int main () { using namespace second; cout << var << endl; cout << (var*2) << endl; return 0;}
这里要注意,语句using namespace 只在其被声明的语句块内有效(一个语句块指在一对花括号{}内的一组指令)。
- C语言扫盲
- Linux扫盲学习指导
- C++ 扫盲学习
- linux学习--扫盲笔记
- 编程学习-扫盲1
- 编程学习-扫盲2
- 编程学习-扫盲3
- C程序存储区扫盲
- 学习Python:Mixin 扫盲班
- docker学习笔记----扫盲贴
- 扫盲
- 扫盲
- 驱动感染技术扫盲(C描述)
- C library and Unix发展扫盲
- 驱动感染技术扫盲(C描述)
- 驱动感染技术扫盲(C描述)
- C/C++ socket网络编程扫盲篇
- C/C++ socket网络编程扫盲篇
- archlinux 音乐播放器与歌词显示
- apk加密
- action标签传值
- 假如给你一天大数据的生活
- c语言中,字符数组与字符串赋值问题
- C++ 扫盲学习
- 一个人可用的链表操作
- wp文章编辑处作者的更改
- 设计模式-----代理模式
- webview小析
- Jsp 中的ajax
- XHTML简介
- git 远程分支
- Sencha Touch的Ext.Ajax.request调用WebService方法实例