使用对象访问成员,通过对象访问的一般格式:
对象名.成员变量名
对象名.成员函数名(参数)
要注意:成员的访问权限
私有成员在类的外部不可以直接调用
【示例】
void Student::printStudent () const
{
cout <<"姓名:"<< name <<"\t 生日:";
birthday.printDate () ;
cout << endl:
};
int main ()
{
Student ss ;
int y,m,d;
string name_;
cout <<"请输入学生的姓名和生日,生日以\"年 月 日\"的次序输入:";
cin >> name_>> y >> m >> d;
ss.setStudent (name_,myDate(y,m,d)) ;
ss.printStudent () ;
return 0;
}
【运行结果】
学生的姓名和生日,生日以”年 月 日”的次序输入:李四 1998 7 9
姓名:李四 生日: 1998/7/9
使用指针访问,格式为:
指针->成员名
【示例】
void Student::printstudent () const
{
cout <<"姓名:" << name << "\t 生日:";
birthday.printDate () ;
cout << endl;
}
int main()
{
Student ss;
int y,m,d;
string name ;
*sp = &ss; //sp是对象指针,指向对象ss的地址
cout <<"请输入学生的姓名和生日,生日以\"年 月 日\"的次序输入:";
cin >> name >> y >> m >> d;
sp->setStudent (name.mypate(ym,d)) ;
sp->printStudent () ;
ss.printStudent();
return 0;
}
【运行结果】
请输入学生的姓名和生日,生日以"年 月 日”的次序输入:张三 1998 7
姓名:张三 生日:1998/7/9
姓名:张三 生日:1998/7/9
使用引用访问,格式为:
引用名.成员名
【示例】
Student ::printStudent () const
{
cout <<"姓名:" << name << "\t 生日:";
birthday.printDate () ;
cout << end1:
}
int main()
{
Student ss ;
int y,m,d;
string name ;
student &sy = ss; //sy是ss的别名
cout<<"请输入学生的姓名和生日,生日以\"年 月 日\"的次序输入:";
cin >> name >> Y >> m >> d;
sy.setStudent (name ,myDate(y,m,d)) ;
sy.printStudent () ;
ss.printStudent () ;
return 0;
}
例题1:【程序分析题】 以下程序有一处错误,请指出并改正
#include<iostream.h>
class Test
{
int x, y;
public:
fun(int l, int j) {x=l;y=j;}
show(){
cout<<"x="<<x;
if(y) coutt<<",y="<<y<<endl ;
cout<<endl;
};
}
void main()
{
Test a;
a.fun (1);
show() ;
a.fun (2, 4) ;
a.showk() ;
}
【正确答案】: 【a.fun (1); 】改为: 【a.fun (1,2);】
【答案解析】:只有一个参数,除非声明部分定义一个默认值
例题2:【程序设计题】下面是一个类的测试程序,请设计出能使用如下测试程序的类。
int main () {
Test a;
a. init(2019, 100) ;
a. print () ;
return 0;
}
其执行结果为:
测试结果为: 2019-100=1949
【正确答案】
class Test
{
int x, y;
public:
void init(int a, int b) {x=a;y=b;}
void print() {cout<<"测试结果为:"<< x <<"-"<< y <<"="<< x-y <<endl;
}
#include <iostream>
using namespace std ;
class book
{
private :
char num[8 ]
______(1)_________
public:
void set()
{ cin>> num>> price };
void display( )
{cout<< num << " "<< price<< endl; }
};
void main ()
{
book b;
______(2)______
b. display();
}
【正确答案】: class Myclass {
public:
Myclass (int i) {n=i;}
void SetNum(int x) {n=x;}
private:
int n;
};
int f()
{
Myclass *p =new Myclass (45);
______________________
}
A. p->SetNum(50);
B. p->n = 50;
C. SetNum(50);
D.*p-> SetNum (50) ;
【正确答案】: A
【答案解析】:n是私有的,不能直接赋值,指针->成员函数(参数)