建立一個不能被修改的對象,還能夠作些事情ios
const 對象 變量名;函數
必須手動建立構造函數,不然成員變量將永遠都是垃圾值this
#include <iostream> #include <stdio.h> using namespace std; class Person { public: string name; Person() { name = "haha"; } }; int main() { const Person person; return 0; }
不能調用很是量成員函數,由於調用的函數可能會修改對象spa
靜態成員變量和函數,能夠隨意調用,由於它們本質上不屬於某個類code
void sayHello() const { cout << "Hello" << endl; }
#include <iostream> #include <stdio.h> using namespace std; class Person { public: string name; Person() { name = "haha"; } // 修改對象的函數,不能加const void setName(string name) { this->name = name; } void sayHello() const { cout << "Hello" << endl; // 常量成員函數不能調用很是量成員函數,由於調用的函數可能會修改對象 // setName("hehe"); } }; int main() { const Person person; // 定義一個常量對象 // person.name = "hehe"; // 不能位於等號左邊 // person.setName("hehe"); // 常量對象不能調用很是量成員函數 person.sayHello(); string name = person.name; cout << name << endl; return 0; }
#include <iostream> #include <stdio.h> using namespace std; class Person { public: Person() { } void sayHello() { cout << "Hello" << endl; } void sayHello() const { cout << "const Hello" << endl; } }; int main() { const Person p1; Person p2; p1.sayHello(); // 常量對象調用常量成員函數 p2.sayHello(); // 正常的對象調用沒常量成員函數 return 0; }
// const Vector<int> v; // v[0] = 0; // v[0]返回的是const int &,不能被修改 template<class T> const T &Vector<T>::operator[](Rank r) const { return _elem[r]; } // Vector<int> v; // v[0] = 0; // v[0]返回的是int &,可修改 template<class T> T &Vector<T>::operator[](Rank r) { return _elem[r]; }