C++短跑回顾
2006-03-09 14:36
417 查看
本文只是以5天时间超快地学完C++后,为了让自己不忘记,而写下的脑中的记忆.可能有误的,大家不要轻信.如发现错误,,还麻烦告诉我一声.
运算符重载,操作数只能是类,系统先检查操作数是不是系统默认的(如果是+,则检查是不是int float...),不是刚检查员有没有对这个操作符重载.
b是a的派生,b * p = &b,p指向的是基类头部.
友元函数
// practice.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Date; //提前声明
class Time
{
public:
Time(int,int,int);
void display(Date &);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
Date(int,int,int);
friend Time; //友元类的使用
private:
int month;
int day;
int year;
};
//Time类的构造函数
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){}
void Time::display(Date &d)
{
cout<<d.month<<"/"<<d.day<<"/"<<d.day<<"/"<<d.year<<endl;
}
//Date类的构造函数
Date::Date(int m,int d,int y):month(m),day(d),year(y){}
int _tmain(int argc, _TCHAR* argv[])
{
Time t1(10,13,56);
Date d1(12,23,2004);
t1.display(d1);
return 0;
}
模板类
// practice.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
template <class myType1>
class myClass
{
public:
myClass(myType1 a)
{
x = a;
cout<<a<<endl;
}
private:
myType1 x,y;
};
int _tmain(int argc, _TCHAR* argv[])
{
myClass <int> myClass1(3323); //切记切记,一定要加上<int>指明变量类型,要不会出错
}
运算符重载,操作数只能是类,系统先检查操作数是不是系统默认的(如果是+,则检查是不是int float...),不是刚检查员有没有对这个操作符重载.
b是a的派生,b * p = &b,p指向的是基类头部.
函数的重载: 根据参数的个数、类型来决定使用哪一个函数体。这些函数是同名的,不能根据函数的返回值来判定使用哪一个函数体。 重载 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; void myMax(int a,int b) { cout<<"int a b"<<endl; } void myMax(float a , float b) { cout<<"float a b"<<endl; } void myMax(int a,float b) { cout<<"int a float b"<<endl; } void myMax(float a ,int b ) { cout<<"float a ,int b"<<endl; } int _tmain(int argc, _TCHAR* argv[]) { // myMax(5.5,3); 对重载函数的调用不明确 // myMax(5.5,5); 对重载函数的调用不明确 myMax(3,4); // myMax(3.3,3.2); 对重载函数的调用不明确 return 0; } 上面的C++程序,编译会出错,提示“对重载函数的调用不明确”。可能是因为直接用数值来做为形参,系统难以辨认。可改为先定义某一类型变量,然后用变量来做形参,代码如下: 用变量做形参重载 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; void myMax(int a,int b) { cout<<"int a b"<<endl; } void myMax(float a , float b,float c) { cout<<"float a b c"<<endl; } void myMax(int a,float b) { cout<<"int a float b"<<endl; } void myMax(float a ,int b,int c ) { cout<<"float a ,int b,int c"<<endl; } int _tmain(int argc, _TCHAR* argv[]) { float fa,fb,fc; int ia,ib,ic; cin>>fa>>fb>>fc>>ia>>ib>>ic; myMax(fa,ia,ib); myMax(3,4); myMax(fa,fb,fc); return 0; } 函数模板: 模板 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; template <typename Ti,typename Tj> //模板只能在全局部分定义 void myMax( Ti a, Tj b) { if( a > b) cout<<"a>b"<<endl; else cout<<"a<b"<<endl; } int _tmain(int argc, _TCHAR* argv[]) { float fa; int ia; cin>>fa>>ia; myMax(fa,ia); return 0; } 有默认参数的函数: 标题 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { void printabc(int ,int ,int = 888 ); //此处不能省略对默认参数的赋值,可以用" int = 888 " printabc(3,4,5); printabc(11,22); return 0; } void printabc(int a,int b,int c) //此处不能省略形参名,得是能省略对默认参数的赋值 { cout<<a<<b<<c; } string类型的变量可以直接用> < ==等来比较 类外定义成员函数: 标题 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class myClass { public: //如不没有声明是public还是private还是protected,则默认是private,如果要在MAIN中使用,一定要用public,不要忘记了! void printfSTH(int a); }; //一定不要忘记了这个 void myClass::printfSTH(int a) { cout<<"a = "<<a; } int _tmain(int argc, _TCHAR* argv[]) { myClass myObj; myObj.printfSTH(34); } 构造函数: 构造函数不能有返回值类型。 参数初始化列表对数据成员初始化 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class myClass { public: myClass(int a); int b; }; myClass::myClass(int a):b(a) //参数初始化列表对数据成员初始化只能用在构造函数中,且被初始化的变量只能是基类的成员。 { // int b ; 如只在此处定义b,则会了错,提示b不是基类成员 int c = a; cout<<"a = "<<a; cout<<endl<<"b = "<<b<<endl; cout<<"c = "<<c; } int _tmain(int argc, _TCHAR* argv[]) { myClass myObj(88520); } const 型数据的小结
类,构造函数,析构函数 当没有主动去停用一个类时,这个类在整个程序结束时才被释放,也就是说,在整程序结束时才执行 所有的析构函数。 标题 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class myBaseClass { public: myBaseClass(); ~myBaseClass(); int a,b; }; myBaseClass::myBaseClass() { cout<<":::::::::myBaseClass start:::::::::::"<<endl; } myBaseClass::~myBaseClass() { cout<<":::::::::myBaseClass end:::::::::::"<<endl; } int _tmain(int argc, _TCHAR* argv[]) { myBaseClass const myConstObj; // myConstObj.a = 3; 值指定常数对象 --不能对用CONST定义的常对象赋值 myBaseClass myObj; myBaseClass * p = &myObj; p->a = 33; //此处只能用“->”而不能用 p.a,可能对指针只能用 -> 吧 cout<<"p->a = "<<p->a<<endl; } 友元函数 // practice.cpp : 定义控制台应用程序的入口点。 //友元函数 #include "stdafx.h" #include <iostream> using namespace std; class myBaseClass { public: myBaseClass(); ~myBaseClass(); int a,b; friend void pengyou( myBaseClass & t ); //必须有类做为参数 private: int pa,pb; }; void pengyou( myBaseClass &t ) { cout<<t.pa<<endl; } myBaseClass::myBaseClass() { cout<<":::::::::myBaseClass start:::::::::::"<<endl; } myBaseClass::~myBaseClass() { cout<<":::::::::myBaseClass end:::::::::::"<<endl; } int _tmain(int argc, _TCHAR* argv[]) { myBaseClass myObj; //必须有实例化了的对象 pengyou(myObj); } 友元成员函数 // practice.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class Date; class Time { public: Time(int,int,int); void display(Date &); private: int hour; int minute; int sec; }; class Date { public: Date(int,int,int); friend void Time::display(Date &); private: int month; int day; int year; }; Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){} void Time::display(Date &d) { cout<<d.month<<"/"<<d.day<<"/"<<d.day<<"/"<<d.year<<endl; } Date::Date(int m,int d,int y):month(m),day(d),year(y){} int _tmain(int argc, _TCHAR* argv[]) { Time t1(10,13,56); Date d1(12,23,2004); t1.display(d1); return 0; } |
// practice.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Date; //提前声明
class Time
{
public:
Time(int,int,int);
void display(Date &);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
Date(int,int,int);
friend Time; //友元类的使用
private:
int month;
int day;
int year;
};
//Time类的构造函数
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){}
void Time::display(Date &d)
{
cout<<d.month<<"/"<<d.day<<"/"<<d.day<<"/"<<d.year<<endl;
}
//Date类的构造函数
Date::Date(int m,int d,int y):month(m),day(d),year(y){}
int _tmain(int argc, _TCHAR* argv[])
{
Time t1(10,13,56);
Date d1(12,23,2004);
t1.display(d1);
return 0;
}
模板类
// practice.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
template <class myType1>
class myClass
{
public:
myClass(myType1 a)
{
x = a;
cout<<a<<endl;
}
private:
myType1 x,y;
};
int _tmain(int argc, _TCHAR* argv[])
{
myClass <int> myClass1(3323); //切记切记,一定要加上<int>指明变量类型,要不会出错
}
相关文章推荐
- 回顾一学期的c++课程学习
- C++回顾之顺序容器
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- c++术语表回顾
- c++ 基础知识回顾
- WPS 5月19号 C++实习 笔试题回顾
- c++回顾(六)
- 【语法回顾】C++STL:顺序容器
- 【语法回顾】C++中的输入控制:cin,getline,cin.getline,gets(转)
- C++回顾 统计词频问题 -- vector、map、hash_map(三种方式时间比较)
- C/C++回顾(一) 基础篇
- c++回顾(七)
- C++回顾之static与单例模式
- C++回顾之构造函数与析造函数
- C++回顾之前置++、后置++、不等号!及赋值运算符重载
- 【C++】回顾C++多维指针
- C++ 知识回顾总结 -- 指针
- C/C++快速回顾
- C++基础回顾
- C++ 基础回顾