随笔分类 - C++学习笔记
关于运算符 前置 ++ 和后置++ (--)
摘要:1: 普通函数时 前置++:参数 是一个非只读的引用类型,返回类型是一个非只读类型的引用。而且必须是先运算后取值 后置++: 参数是一个非只读的引用类型和一个int型(int型没什么作用,用来区分前置和后置)。返回值是一个普通类 ,先取值后运算(可以用一个无名对象)#include<iostream>#include<stdio.h>#include<string>using namespace std;class A{ int n; public: A(int n):n(n){} int get(); friend A& operator++(A
阅读全文
运算符重载
摘要:c++ 的运算符的操作对象是简单的类型,比如 + 既可以用于整形加,也可以用于浮点型加。但是很多时候对于用户自定义的类型也需要相关的操作。这时就需要重载运算符定义运算符的重载可以使程序简单明了。1:按照是否 可以重载 和 重载函数的类型,可以分为下面四类: 1>sizeof, . , .* ,:: , ? : 不能重载 2> = , -> ,[],() 只能重载为普通函数成员 3> new delete 不能重载为普通函数成员 4> 其他的不能重载为静态函数成员,但可以重载为普通函数成员和 普通函数2:重载为普通函数 函数定义的基本格式: 返回值类型 operat
阅读全文
父类 子类
摘要:如果一个派生类的派生符是public 则 ,将基类称为 父类,派生类称为子类,C++ 允许,父类的指针直接指向子类的对象,或者父类引用子类:#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;class point{ int x; int y; public: point(int x,int y):x(x),y(y){} void show(){ cout<<"point"<<endl;} };class circle:p
阅读全文
内存泄露
摘要:1: 若引用变量 a 引用的是 对象 b ,则 对象的构造和析构由 b完成, 与 a 无关。2: 若被引用变量 a 引用的是 能够自动调用构造函数的 new 生成的,则必须用能自动调用 析构函数的 delete &a 析构对象,否则将导致内存泄露。3: 若指针 a 指向的对象是用 new 生成的,则 必须调用 delete a 析构对象,不能调用free (a) ,否则将导致内存泄露。 #include <iostream.h>#include<stdio.h>#include<stdlib.h>using namespace std;class A
阅读全文
关于单继承类的构造与析构顺序
摘要:单继承派生类只有一个基类或虚基类,根据4个优先级别容易确定构造顺序:首先调用派生类虚基类的构造函数;无论虚基类的构造函数列出否总会被执行;接着调用派生类基类的构造函数,无论基类的构造函数列出与否总会被执行;然后按照派生类数据成员声明的顺序,依次初始化数据成员或调用相应构造函数,对象成员无论列出与否总会被构造;在然后最后执行派生类的构造函数体。析构是构造的逆序,所以反过来就行。 #include <iostream.h>#include<stdio.h>#include<stdlib.h>using namespace std;class A{ int a;p
阅读全文
const 详解
摘要:内容参考于://http://blog.csdn.net/eric_jo/article/details/4138548#include<iostream>#include<string>using namespace std;void f1(const int a,int b){ //a++; 参数是常量不可变 b++; cout<<a<<" "<<b<<endl;}void f2(const int *a,int *b){ //(*a)++; 指针所指的内容是常量不可变 (*b)++; cout&l
阅读全文
成员指针
摘要:#include<iostream>#include<string>using namespace std;class boy{ public: int a; int b; boy(int a,int b):a(a),b(b){} void get(){cout<<a<<" "<<b<<endl;}};int main(){ boy a(2,3); boy *mm=&a; a.get(); int boy::*p=&boy::a;//类型名 类名+作用与域说明符+*变量 ...
阅读全文
名字空间
摘要:#include<iostream>#include<string>using namespace std;namespace a{ int x=6;int k=10;};namespace b{ int x=2;int l=90;};namespace c{ int y=3;int m=40;};int main(){ //第一种访问方式。直接访问 cout<<"a的x"<<a::x<<endl<<"b的x"<<b::x<<endl; //利用空间名称+对象
阅读全文
函数参数和数据成员同名
摘要:#include<iostream>#include<string>#include<stdio.h>#include<stdlib.h>using namespace std;class boy{ string name; int age; public: boy(string name,int age) { name=name; age=age; this->name=name;//当函数参数和数据成员同名时,函数参数的优先级高,所以优先 boy::age=age;//访问的是函数参数,利用this 或者...
阅读全文
友元
摘要:友元出现的目的是为了访问和更新 友元类的private 和 protect 信息:第一类: 类外的普通函数为友元类函数: 1 #include<iostream> 2 #include<string> 3 #include<stdio.h> 4 using namespace std; 5 class boy{ 6 public: 7 boy(string name,int age):name(name),age(age){} 8 ~boy(){} 9 //friend void get(boy& b);//要有参数1...
阅读全文
静态数据 成员和静态函数
摘要:一:静态数据成员的出现是为了解决这样一类的问题的:让所有的对象共享一个对象。比如,现在定义一个银行卡的类,有两个数据成员,money的总数num 和 利率rate。因为rate对于所有的对象是一样的,如果所有的对象都有一个rate数据成员(如下面的类),就会使效率降低:1 class card{2 public:3 int num;//总数4 int rate;//利率5 card (int num,int rate):num(num),rate(rate){}6 };二:静态数据成员的声明,定义,和访问: 要在类内部声明,在外部定义和初始化(就像全局对象那样,即使是private的也是这..
阅读全文
C++类的初始化
摘要:转载自:http://blog.csdn.net/coder_xia/article/details/74478221、关于构造函数1)用构造函数确保初始化对于一个空类[cpp]view plaincopyclassEmpty{};编译器会自动声明4个默认函数:构造函数,拷贝构造函数,赋值函数,析构函数(当然,如果不想使用自动生成的函数,就应该明确拒绝),这些生成的函数都是public且inline。构造函数对数据成员进行初始化,使用未初始化值可能导致无法预知的错误,所以,确保每一个构造函数都将每一个成员初始化。2)为什么构造函数不能有返回值如果有返回值,要么编译器必须知道怎么处理返回值,要么
阅读全文
sizeof操作符
摘要:sizeof()是一个操作符,不是函数。#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){ int a=printf("a")<<endl; cout<<a<<endl; cout<<sizeof(printf("abc"))<<endl;}
阅读全文