类的声明和对象的定义
声明类类型
类也是一种数据类型,由用户自己定义或者系统提供,一般既包括数据,又包括操作数据的函数。
示例:
class Person{
private: //声明 以下为私有部分
string name;
int age;
string gendar;
public: //声明 以下为公有部分
void desc(){
cout<<"My name is "<<name<<", I'm "<<age<<", and I'm a "<<gendar<<endl;
}
void eat(){
cout<<"I'm eatting! It's yummy!"<<endl;
}
};
Student stud1,stud2;
- 如果在类的定义中既不指定private,又不指定public,则系统就默认为私有的。
类的一般定义形式为:
class 类名{
private:
//私有的数据和成员函数
public:
//公有的数据和成员函数
protected:
//受保护的数据和成员函数
}; //别忘了结尾的分号,这跟Java不一样,Java不需要结尾的分号
- private、public和protected的声明顺序任意,也可以不只有一个private、public和protected,但通常只有一个。
定义对象的方法
先看一个例子
Person p1,p2;
当然还有其他的定义方法,但统统不要记住,这种方法最常用。
- 类和结构体的异同点:C++扩展了结构体,使它和类一模一样,也有private、public,也有函数,唯一的一点不同是,当不指明private和public时,struct默认是public权限,而class是private权限。
类的成员函数
私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。成员函数可以访问本类中任何成员。
成员函数只存储一份,该类的所有对象共用这一份成员函数。
在类外定义成员函数
class Person{
public:
void desc(); //公用成员函数的原型声明
void eat();
private:
string name;
int age;
sting gendar;
}
void Person::desc(){ //在类外定义desc类函数
cout<<"My name is "<<name<<", I'm "<<age<<", and I'm a "<<gendar<<endl;
}
void Person::eat(){
cout<<"I'm eatting! It's yummy!"<<endl;
}
Person p1,p2;
::是域名运算符,用它声明函数是属于哪个类的。
::desc()或desc(),表示desc()函数不属于任何类,这个函数不是成员函数,而是全局函数。
通常都是将类的声明放在一个头文件中,然后在另一个文件中写上函数的实现。
inline成员函数
类的成员函数也可以指定为内置(inline)函数。
class Person{
public:
inline void eat(); //声明此成员函数为内置函数
private:
string name;
int age;
sting gendar;
}
inline void Person::eat(){ //在类外定义eat为内置函数
cout<<"I'm eatting! It's yummy!"<<endl;
}
- 在类体内定义的成员函数,默认指定为内置函数,不需要inline指定
-在类体外定义的成员函数,要想指定为内置函数,必须inline.
- 只有在类外定义的成员函数规模很小而调用频率较高时才将成员函数指定为内置函数。
对象成员的引用
通过对象名和成员运算符
p1.name="zhangsan";
p1.desc();
cout<<p1.age<<endl;
通过指向对象的指针访问对象中的成员
Person p1, *pt;
pt = &p1;
cout << pt->name;
通过对象的引用
Person p1;
Person &p2 = p1;
cout<<p2.name;
类声明和成员函数定义的分离
将类的声明放在一个文件中
//student.h
class Student{
public:
Student(){
age=18;
}
void display();
private:
int age;
};
将函数的定义放在另一个文件中
//student.cpp
#include <iostream>
#include "student.h" //必须包含这一行
void Student::display(){
using namespace std;
cout<<"I'm "<<age<<" years old."<<endl;
}
一个完整的程序应当包含主函数
//main.cpp
#include <iostream>
#include "student.h"
int main(){
Student stud;
stud.display();
return 0;
}