C++ 初步
c++新特性:
1. 初始化方法:
復制初始化 int x=1024;
直接初始化 int x (1024);
2.變量隨用隨定義
3.增加bool數(shù)據(jù)類型
輸入輸出:
cout<<x;
cin>>x>>y;
cout<<oct<<x<<endl; //oct為8進制,dec為十進制,hex為16進制
cout<<boolalpha<<y<<endl; //輸出布爾型數(shù)據(jù)
命名空間:
namespace A
{
int x=0;
void f1();
void f2();
}
A::x A::f1()
引用:變量的別名
int a=3;
int &b=a; 引用必須初始化
b=10;
結構體類型的引用:
typedef struct
{
int x;
int y;
}Coor;
Coor c1;
Coor &c=c1;
c.x;
指針類型的引用:
類型 *&指針引用名=指針;
int a=10;
int *p=&a;
int *&q=p;
*q=20; //a=20;
引用做函數(shù)參數(shù):
void fun(int &a,int &b)
{
int c=0;
c=a;
a=b;
b=c;
}
int x=10,y=20;
fun(x,y);
const:
函數(shù)參數(shù)默認值:函數(shù)括號內最右端的變量必須有默認值 ,無實參用默認值,否則覆蓋。
函數(shù)重載:在相同作用域下,有同名函數(shù),參數(shù)個數(shù)和類型不同。
內聯(lián)函數(shù): 編譯時將函數(shù)體內代碼和實參代替函數(shù)調用語句。效率高,有條件
關鍵字:inline
內存管理:
申請:new int *p=new int; 釋放:delete p;
塊內存: int *arr=new int[10]; delete []arr;
注意事項:c語言:*malloc(),free()。
if(NULL==p){ // 申請失敗 } delete p; p=NULL;
類:
對象實例化:
1.從棧實例化對象:class TV{ .... } TV tv; TV tv[20];
2.從堆實例化: TV *p =new TV(); delete p;
對象成員的訪問:
1. 棧: tv.type=0; tv.func();
2.堆: p->tyoe=0; p->func(); delete p; p=NULL;
數(shù)據(jù)類型:
1.string:
#include<string>
初始化:string s1; s1為空串
string s2("ABC");
string s3(s2); 將s3初始化為s2的一個副本
string s4(n,'c'); 將s4初始化為字符‘c’的n個副本
常用操作: s.empty(), s.size() , s[n], = , + , == , !=
數(shù)據(jù)封裝:
#include<stdlib.h> #include<iostream> #include<string> using namespace std; class Student { public: void setName(string _name) { m_strName=_name; } string getName() { return m_strName; } void setGender(string _gender) { m_strGender=_gender; } string getGender() { return m_strGender; } int getScore() { return m_iScore; } void initScore() { m_iScore=0; } void study(int _score) { m_iScore+=_score; } private: string m_strName; string m_strGender; int m_iScore; }; int main(void) { Student stu; stu.initScore(); stu.setName("hhhh"); stu.setGender("F"); stu.study(5); stu.study(3); cout<<stu.getName()<<" "<<stu.getGender()<<" "<<stu.getScore()<<endl; return 0; }
內聯(lián)函數(shù):inline
類內定義:類內定義的函數(shù)會優(yōu)先轉換為內聯(lián)函數(shù)
類外定義:1.同文件類外定義
#include<stdlib.h> #include<iostream> #include<string> using namespace std; class Teacher { public: void setName(string _name); string getName(); void setGender(string _gender); string getGender(); void setAge(int _age); int getAge(); void teach(); private: string m_strName; string m_strGender; int m_iAge; }; void Teacher::setName(string _name){ m_strName=_name; } string Teacher::getName() { return m_strName; } void Teacher::setGender(string _gender){ m_strGender=_gender; } string Teacher::getGender(){ return m_strGender; } void Teacher::setAge(int _age){ m_iAge=_age; } int Teacher::getAge(){ return m_iAge; } void Teacher::teach(){ cout<<"teaching!...."<<endl; } int main(void) { Teacher t; t.setName("Kongzi"); t.setGender("M"); t.setAge(70); cout<<t.getName()<<" "<<t.getGender()<<" "<<t.getAge()<<endl; t.teach(); return 0; }
2.分文件類外定義
//teacher.h /* * teacher.h * * Created on: 2017年7月12日 * Author: rmbp */ #include <string> using namespace std; class Teacher { public: void setName(string _name); string getName(); void setGender(string _gender); string getGender(); void setAge(int _age); int getAge(); void teach(); private: string m_strName; string m_strGender; int m_iAge; }; //teacher.cpp /* * teacher.cpp * * Created on: 2017年7月12日 * Author: rmbp */ #include "teacher.h" #include<iostream> using namespace std; void Teacher::setName(string _name){ m_strName=_name; } string Teacher::getName() { return m_strName; } void Teacher::setGender(string _gender){ m_strGender=_gender; } string Teacher::getGender(){ return m_strGender; } void Teacher::setAge(int _age){ m_iAge=_age; } int Teacher::getAge(){ return m_iAge; } void Teacher::teach(){ cout<<"teaching!...."<<endl; } //hello.cpp #include<stdlib.h> #include<iostream> #include<string> #include "teacher.h" using namespace std; int main(void) { Teacher t; t.setName("Kongzi"); t.setGender("M"); t.setAge(70); cout<<t.getName()<<" "<<t.getGender()<<" "<<t.getAge()<<endl; t.teach(); return 0; }
內存分區(qū):
棧區(qū):系統(tǒng)控制
堆區(qū):程序員控制
全局區(qū):存儲全局變量和靜態(tài)變量
常量區(qū):字符串,常量
代碼區(qū):存儲邏輯代碼的的二進制
構造函數(shù):在對象實例化時被自動調用,與類名同名,沒有返回值,可以重載,只用到一個構造函數(shù),用戶沒有創(chuàng)建時系統(tǒng)自動創(chuàng)建。
//teacher.h #include <string> using namespace std; class Teacher { public: Teacher(); Teacher(string name,int age); //可以初始化參數(shù)值 void setName(string _name); string getName(); void setAge(int _age); int getAge(); private: string m_strName; string m_strGender; int m_iAge; }; //teacher.cpp #include "teacher.h" #include<iostream> using namespace std; Teacher::Teacher() { m_strNme="JIM"; m_iAge=7; cout<<"Teacher()"<<endl; } Teacher::Teacher(string name,int age){ m_strNme=name; m_iAge=age; cout<<"Teacher(string name,int age)"<<endl; } void Teacher::setName(string _name){ m_strName=_name; } string Teacher::getName() { return m_strName; } void Teacher::setAge(int _age){ m_iAge=_age; } int Teacher::getAge(){ return m_iAge; } //hello.cpp #include<stdlib.h> #include<iostream> #include<string> #include "teacher.h" using namespace std; int main(void) { Teacher t1; Teacher t2("Merry",16); cout<<t1.getName()<<" "<<t1.getAge()<<endl; cout<<t2.getName()<<" "<<t2.getAge()<<endl; return 0; }
默認構造函數(shù):在對象實例化時不需要傳遞參數(shù)
構造函數(shù)初始化列表:先于構造函數(shù)執(zhí)行,只能用于構造函數(shù),可以同時初始化多個數(shù)據(jù)
class Student { public: Student():m_strName("JIM"),m_iAge(10){} private: string m_strName; int m_iAge; };
必要性:
class Circle { public: Circle():m_dPi(3.14){} //不能用構造函數(shù),const private: const double m_dPi; }
//teacher.h #include <string> using namespace std; class Teacher { public: Teacher(string name="JIM",int age=1,int m=100); void setName(string _name); string getName(); void setAge(int _age); int getAge(); int getMax(); private: string m_strName; int m_iAge; const int m_iMax; }; //teacher.cpp #include "teacher.h" #include<iostream> using namespace std; Teacher::Teacher(string name,int age,int m):m_strName(name),m_iAge(age),m_iMax(m) { cout<<"Teacher(string name,int age)"<<endl; } void Teacher::setName(string _name){ m_strName=_name; } string Teacher::getName() { return m_strName; } void Teacher::setAge(int _age){ m_iAge=_age; } int Teacher::getAge(){ return m_iAge; } int Teacher::getMax(){ return m_iMax; } //hello.cpp #include<stdlib.h> #include<iostream> #include<string> #include "teacher.h" using namespace std; int main(void) { Teacher t1("merry",12); cout<<t1.getName()<<" "<<t1.getAge()<<" "<<t1.getMax()<<endl; return 0; }
拷貝構造函數(shù): 類名(const 類名& 變量名)
1.當沒有自定義拷貝構造函數(shù)則系統(tǒng)系統(tǒng)自動生成一個默認的拷貝構造函數(shù)。
2.當采用直接初始化或復制初始化實例化對象時系統(tǒng)自動調用拷貝構造函數(shù)。
無參構造函數(shù),有參構造函數(shù)(參數(shù)帶默認值)--》默認構造函數(shù)
系統(tǒng)自動生成普通構造函數(shù)和拷貝構造函數(shù)。不能重載。
//teacher.h Teacher(const Teacher& tea); //.... //teacher.cpp teacher::Teacher(const Teacher &tea){ cout<<"Teacher(const Teacher &tea)"<<endl; } //hello.cpp int main(void) { Teacher t1; Teacher t2=t1; Teacher t3(t1); //.... }
//hello.cpp void test(Teacher t) { } int main(void) { Teacher t1; //構造函數(shù) test(t1); //拷貝構造函數(shù) //.... }
析構函數(shù):~類名(),不允許加任何參數(shù),系統(tǒng)自動產生,在對象銷毀時自動調用。沒有返回值,沒有參數(shù)不能重載
//teacher.h /* * teacher.h * * Created on: 2017年7月12日 * Author: rmbp */ #include <string> using namespace std; class Teacher { public: Teacher(string name="JIM",int age=1); //構造 Teacher(const Teacher &tea); //拷貝構造 ~Teacher(); //析構函數(shù) void setName(string _name); string getName(); void setAge(int _age); int getAge(); private: string m_strName; int m_iAge; }; //teacher.cpp #include "teacher.h" #include<iostream> using namespace std; Teacher::Teacher(string name,int age):m_strName(name),m_iAge(age) { cout<<"Teacher(string name,int age)"<<endl; } Teacher::Teacher(const Teacher &tea) { cout<<"Teacher(const Teacher &tea)"<<endl; } Teacher:~Teacher() { cout<<"~Teacher()"<<endl; } void Teacher::setName(string _name){ m_strName=_name; } string Teacher::getName() { return m_strName; } void Teacher::setAge(int _age){ m_iAge=_age; } int Teacher::getAge(){ return m_iAge; } //hello.cpp #include<stdlib.h> #include<iostream> #include<string> #include "teacher.h" using namespace std; int main(void) { Teacher t1; //Teacher *p=new Teacher(); //delete p; Teacher t2(t1); return 0; }
浙公網(wǎng)安備 33010602011771號